我想通过从 std::cin 流式传输来初始化 fusion::vector。正如文档所说,这似乎是不可能的:
...使用 std::string 或 C 风格的字符串元素提取序列通常不起作用,因为流式序列表示可能无法明确解析
之前可能已经问过这个问题,但我想深入了解“可解析字符串”的外观。
她就是一个例子:
#include <iostream>
#include <sstream>
#include <boost/fusion/sequence/io.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/fusion/tuple/tuple.hpp>
#include <boost/assert.hpp>
#include <string>
#include <assert.h>
using namespace boost::fusion;
using std::cout;
using std::endl;
void main()
{
std::istringstream iss("42,aaa,bbb");
vector<int, std::string, std::string> v;
iss >> tuple_open("") >> tuple_close("") >>tuple_delimiter(",");
iss>>v;
assert(get<1>(v) == std::string("aaa,bbb"));
cout << v << endl;
cout << "element 0: " << get<0>(v) << endl;
cout << "element 1: " << get<1>(v) << endl;
cout << "element 2: " << get<2>(v) << endl;
}
输出:
(42 aaa,bbb )
element 0: 42
element 1: aaa,bbb
element 2:
如何让 fusion io 运算符“>>”与 std::string 很好地配合使用?