我知道还有其他类似的问题,但不是很清楚。
现在我觉得这是一个愚蠢的问题,因为我确定我已经有了答案,但还是让我问吧。
所以我基本上有一个函数,它接受一个字符串,然后根据适当的变量类型将它转换成这样:
template<class T>
void ConvertValue(std::string str, T &variable)
{
variable = static_cast<T>(str);
}
所以这似乎没问题吧?但问题是你不能将字符串转换为 int 或 float,因此我必须对 int 和 float 以及其他类型进行模板专门化,它不能转换为所以我要问的是我应该有像这样:
void ConvertValue(std::string str, int &variable) { variable = atoi(str.c_str()); }
void ConvertValue(std::string str, float &variable) { ... }
void ConvertValue(std::string str, double &variable) { ... }
void ConvertValue(std::string str, std::vector<int> &variable) { ... }
..等等
或者我应该使用模板特化?哪一个更有意义?我倾向于函数重载,因为大多数类型都会有自己的转换函数,所以由于它们略有不同,函数重载对我来说是合乎逻辑的,但我不知道我是否遗漏了什么。
我应该坚持使用函数重载吗?或者切换到模板特化?
最佳答案
如果函数的内部结构必须针对每种类型而不同,并且可能包括类型检查,那么只有多个函数会更简单、更清晰。
另一方面,如果您有一堆带有用于转换的 toString() 方法的类。然后你会使用一个模板,因为内部结构总是一样的。
关于c++ - 模板特化或函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310281/