0

string values = "hello 2 88.9 true"異なる型の複数の値を保持するような文字列があるとしましょう。適切な型 (ここでは string、int、float、bool) で宣言された変数がいくつかあります。私が基本的にやりたいことはこれです:

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

したがってgetValue、戻り値の型が対応するフィールドの型と一致する が必要です。これは単にテンプレートで可能ですか? テンプレート関数のパラメーターにテンプレートの型を指定せずに、使用する戻り値の型を指定することはできないように感じます。関数自体の本体は、おそらくブーストの lexical_cast と stringstream を使用する予定ですが、より良い解決策があれば、私もそれを支持します!

私はテンプレートに慣れていないので、説明をいただければ幸いです...

4

2 に答える 2

0

私は次のようにします:

#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;
}
于 2013-05-28T13:23:50.337 に答える
0
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;
于 2013-05-28T13:26:01.523 に答える