我想用 C++ 编写一个函数来替换 C 的 sscanf,它将匹配项分配给迭代器。
基本上,我想要类似的东西:
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:它可以工作,但是是非标准的,等等,并且使用它需要很多开销,因为参数的数量是在编译时确定的