一致をイテレータに割り当てるCのsscanfを置き換える関数をC++で記述したいと思います。
基本的に、私は次のようなものが欲しいです:
string s = "0.5 6 hello";
std::vector<boost::any> any_vector;
sscanv(s, "%f %i %s", any_vector);
cout << "float: " << any_cast<float>(any_vector[0]);
cout << "integer: " << any_cast<integer(any_vector[1]);
cout << "string: " << any_cast<string>(any_vector[2]);
正確な詳細は異なる場合がありますが、あなたはその考えを理解します。実装のアイデアはありますか?
これまでのオプションとこれまでの問題:
- std :: istringstream:定数式を照合するためのマニピュレーターはありません
- Boost.Regex:これが機能するかどうかわからないため、これに必要なものよりもはるかに複雑に見える
- Boost.Spirit:これが動的に生成されたフォーマット文字列に対して機能するとは思わない。また、必要以上に複雑に見える
- sscanf:動作しますが、非標準などであり、引数の数はコンパイル時に決定されるため、これを使用すると多くのオーバーヘッドが必要になります。