解析类型名称

Parsing type names

本文关键字:类型      更新时间:2023-10-16

假设我有一个字符串,例如string values = "hello 2 88.9 true",它包含几个不同类型的值。我有几个变量被声明为适当的类型(这里是字符串,int, float和bool)。我要做的就是:

field0 = getValue(0,values);
field1 = getValue(1,values);
... etc

所以我想要的是一个getValue,它的返回类型与相应字段的类型匹配。这是可能的简单模板吗?我觉得你不能只指定你想要使用的返回类型,而不把模板类型放在模板函数的参数中。函数体本身可能会使用boost的lexical_cast和stringstream,但如果你有更好的解决方案,我也愿意!

我不熟悉模板,所以我非常感谢你的解释…

using std::stringstream;
using std::string;
string a;
int b;
double c;
bool d;
string values = "hello 2 88.9 true";
stringstream in(values);
in >> a >> b >> c >> std::boolalpha >> d;

我想这样做:

#include <sstream>
...
std::stringstream ss;
ss << values;
ss >> field0 >> field1 >> field2 >> field3;

如果我真的想把它作为一个getValue函数,我可能会使用粗糙但有效的方法:

template<typename T>
void getValue(unsigned int n, string str, T &val)
{
  string junk;
  std::stringstream ss(str);
  for(unsigned int k=0; k<n; ++k)
    ss >> junk;
  ss >> val;
  return;
}