【发布时间】:2014-09-26 18:50:33
【问题描述】:
我无法正确输出 boost 文档中提供的示例的修改版本
这是关于顺序 OR 解析器的文档: http://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/spirit/qi/reference/operator/sequential_or.html
test_parser("123.456", int_ || ('.' >> int_)); // full
我希望这个表达式用 2 个条目填充 vector<int>:
[0] = 123
[1] = 456
为什么这不起作用?
string input("123.456");
vector<int> output;
string::iterator i = input.begin();
parse(i, input.end(), int_ || ('.' >> int_), output);
我已验证解析返回 true 和 i == input.end()。我还尝试了不同的输出数据结构,包括带有选项的元组和选项向量。而且它们都生成一个仅包含 123 个,而不是 456 个的条目。
【问题讨论】:
-
@Yakk “而且它们都产生一个只包含 123 的条目,而不是 456。”对我来说似乎很清楚。
-
如果我正确阅读了文档,
parse不会输出到向量,而是输出到各个可变参数。由于您只有一个输出参数,因此您只能得到一个结果。 -
Mark Ransom 是对的。提供两个整数确实会输出 123 和 456。一个 std::pair 整数也可以。然而,一个元组
、optional > 和一个可选向量只能产生 123。不过我还是想知道为什么。 -
@Jimbobot 这是因为属性兼容性规则/启发式的限制。这就是Spirit可以变得非常神奇的地方。不过,随着时间的推移,您会对此有所了解。
标签: c++ boost boost-spirit boost-spirit-qi