如何自定义转换模板参数

时间:2015-04-08 16:24:53

标签: c++ templates

假设我解析了一个文件,并且会得到一个包含各种数据类型的字符串向量。我现在正在寻找像以下这样的功能:

template<typename T>
T convertToType(const std::string& str);

可以进行此转换。理想情况下,我应该能够以某种方式提供我自己的转换函数,即如果T是一个自己的复杂类型。有没有办法每次都把它作为参数传递?

我在想某种:

if(typeof(T) == double)
  std::stod(str)
// ...
else
  throw std::logical_error("Type not supported yet!");

另一种选择是为每种类型编写模板特化,但是如果我必须再次为每种类型指定它,这似乎使模板函数的使用变得毫无用处......

1 个答案:

答案 0 :(得分:1)

这让Joachim的评论变成了答案。

使用std::istringstream并让输入操作符>>处理它。

std::istringstream iss(str);
T result;
if (!(iss >> result)) {
    throw std::logical_error("Type conversion failed!");
}
return result;