我知道还有其他类似的问题,但他们不是很清楚。模板专业化或功能超载
现在我觉得这是一个愚蠢的问题,因为我确定我已经有了答案,但是让我反问。
所以我基本上有一个函数,它在一个字符串,然后基于它转换它,像这样适当的变量类型:
template<class T>
void ConvertValue(std::string str, T &variable)
{
variable = static_cast<T>(str);
}
因此这似乎是罚款是否正确?但事情是,你不能转换一个字符串来说一个int或一个浮点数,所以我将不得不为整数和浮点数和其他类型,它不能转换为模板特化,所以我问的是我应该是这样的:
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) { ... }
...等
,或者我应该使用模板特殊化?哪一个会更有意义?我倾向于函数重载,因为大多数类型都会有自己的转换函数,因为它们略微不同,函数重载对我来说是合乎逻辑的,但我不知道我是否错过了某些东西。
我应该坚持功能重载吗?或切换到模板专业化?
我不会假设static-casting一个by-val的'std :: string'到任意一个带有* work *的类型变量,更不用说“很好”。但是你可以在strstream的帮助下完成你想要的任务。 – WhozCraig 2013-04-30 23:01:32
这似乎是一件奇怪的事情。如果你说,将字符串转换为列表,你会发生什么?清单?一个列表与每个条目的字符串之一?这将如何处理用户创建的对象?似乎stringstream应该照顾标准整数,浮点数等......如果需要的话,也许是模板化的容器版本。但是你希望在这里完全达到什么目的? –
2013-04-30 23:03:09