我知道还有其他类似的问题,但不是很清楚。
现在我觉得这是一个愚蠢的问题,因为我确定我已经有了答案,但还是让我问吧。
所以我基本上有一个函数,它接受一个字符串,然后根据适当的变量类型将它转换成这样:
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) { ... }
..ETC
还是我应该使用模板专业化?哪个更有意义?我倾向于函数重载,因为大多数类型都有自己的转换函数,所以因为它们略有不同,所以函数重载对我来说是合乎逻辑的,但我不知道我是否遗漏了什么。
我应该坚持函数重载吗?还是切换到模板专业化?