1 c++ templates generic-programming
我有一个函数,它有三个参数
void replace(const string, const string, string*) ;
Run Code Online (Sandbox Code Playgroud)
我的问题是我要重写的第二个参数,所以它可以是字符串或Path对象(来自Boost Filesystem库,但实际上任何可以被视为字符串的对象都应该这样做)所以我不这样做必须将路径转换为遍布整个地方的字符串.
我知道我可以重载函数并进行两个实现,这就是我现在所做的,所以我有两个相同函数的实现:
void replace(const string, const string, string*) ;
void replace(const string, const path, string*) ;
Run Code Online (Sandbox Code Playgroud)
但这似乎并不优雅,即使第二个只是将路径转换为字符串并调用第一个(因此没有多少代码重复).我尝试过使用模板,如下所示:
template <class T>
void replace(const string, const T, string*) ;
Run Code Online (Sandbox Code Playgroud)
但是函数的实现要求它是一个字符串,所以如果给它一个路径,它需要转换为函数中的一个字符串,我不知道该怎么做,或者它是否是一件好事.
为了使问题更加复杂,将来我可能想要扩展函数,因此它也可以采用一组字符串或一组路径,而不是仅使用一个字符串/路径作为第二个参数.
处理这一切的最佳方法是什么?没有比拥有同一功能的多个实现更好的方法吗?
重载函数是用例的最佳方法.
我通常遵循以下规则:
如果要对不同的数据类型执行相同的操作,则首选模板.
如果要对不同的数据类型执行不同的操作,则首选函数重载.
您的用例属于第二类.
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |