【问题标题】:c++ parse from string using templatec ++使用模板从字符串解析
【发布时间】:2017-03-01 14:28:15
【问题描述】:

在 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);

【问题讨论】:

  • 是的,你可以这样做。
  • @JohnnyMopp 他想要字符串中的值,而不是值中的字符串。
  • @mascoj 好的。错过了……呃。

标签: string


【解决方案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);

注意模板函数特化的函数名中没有特化,当然它是作为返回类型出现的。

【讨论】:

  • 您编写的默认实现不返回任何内容!否则,我认为这就是 OP 正在寻找的模板专业化。这可能是少数应该使用模板特化而不是重载的情况之一。
  • 最初我有一个纯模板函数声明,没有空体,它按预期工作。然后我在 MSVC 中尝试了 null 正文,以确保它在 MSVC 中也有效。
猜你喜欢
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 2015-11-11
  • 2013-08-28
  • 2015-10-17
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多