我无法获得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个。
答案 0 :(得分:1)
||解析器将解析为tuple<optional<A>, optional<B> >
(对于乐观场景)。这永远不会与您的容器属性兼容。
但是,看起来你可以使用
parse(i, input.end(), -int_ >> -('.' >> int_), output);
那说......如果我是秘密Clippy,我可能会说&#34;看起来你正在试图解析实数。
考虑float_
,double_
或具有自定义政策的基础real_parser
。另见: