c ++使用模板

时间:2016-10-19 19:30:55

标签: string

在C ++中,我想从字符串中获取值。

我知道有stoi,stol,stof等功能......

但我可以写一个包含所有这些功能的功能吗?比如使用模板来推断数据类型?

template<typename T>
T fromString(const std::string& s){
    // do something here
    // call stoi, stof according to typename T
}

string si = "1234";
int integer = fromString<int>(si);
string sf = "1234.1234";
float float_point = fromString<float>(sf);

1 个答案:

答案 0 :(得分:1)

无法发表评论,因此......

不清楚您是在寻找单个函数还是模板化(重载)函数?这样可行:没有返回类型为T的默认实现,以及特殊化/用法:

template<typename T> foo(const std::string& str) {}
template<> int foo(const std::string& str) {return atoi(str.c_str());}
template<> double foo(const std::string& str) {return atof(str.c_str());}
...
const std::string str1("1234"); const std::string str2("12.34");
const auto iVal = foo<int>(str1);
const auto dVal = foo<double>(str2);

请注意,函数名称中没有使用模板函数特化的专门化,当然它显示为返回类型。