C++ 顺序或分析器a | | b

C++ 顺序或分析器a | | b,c++,boost,boost-spirit,boost-spirit-qi,C++,Boost,Boost Spirit,Boost Spirit Qi,我无法正确输出boost文档中提供的示例的修改版本 以下是有关顺序或语法分析器的文档: 我希望此表达式用两个条目填充向量: [0] = 123 [1] = 456 为什么这样不行 string input("123.456"); vector<int> output; string::iterator i = input.begin(); parse(i, input.end(), int_ || ('.' >> int_), output); 字符串输入(“1

我无法正确输出boost文档中提供的示例的修改版本

以下是有关顺序或语法分析器的文档:

我希望此表达式用两个条目填充
向量

[0] = 123
[1] = 456
为什么这样不行

string input("123.456");
vector<int> output;

string::iterator i = input.begin();

parse(i, input.end(), int_ || ('.' >> int_), output);
字符串输入(“123.456”);
矢量输出;
string::iterator i=input.begin();
解析(i,input.end(),int||('.>>int|),output);

我已经验证了parse返回的
true
I==input.end()
。我还尝试了不同的输出数据结构,包括带optionals的元组和optionals的向量。它们都生成一个只包含123个条目的条目,而不是456个条目。

解析器将解析成
tuple@Yakk“它们都生成一个条目,只包含123个,而不是456个。”我似乎很清楚。如果我正确阅读了文档,
parse
不会输出到向量,它输出到各个可变参数。因为只有一个输出参数,所以只能得到一个结果。提供两个INT将输出123和456。一对int也可以工作。然而,一个元组和一个可选向量只能产生123。我仍然想知道为什么。@Jimbobot这是因为属性兼容性规则/启发式的限制。这就是精神可以变得非常神奇的地方。不过,随着时间的推移,您会对此有所了解。| |是一个顺序或解析器。去阅读我提供的链接中的文档。我想我应该知道这些文件。然而,我掩盖了一个事实,即您使用的是
|
而不是
|
。更新了我的答案。我还添加了一个链接,指向一个答案,我在其中谈到了解析混合整数/双精度整数,这似乎是您所需要的。那样。你把融合元组和增强元组混淆了吗?那样的话,
#include
可以帮你解决问题。B.为了了解它的真正工作原理,您可能最好阅读源代码,因为文档并不打算详细解释属性转换和兼容性规则的各种权衡和干扰。@Jimbobot我找到了时间来演示我使用
tuple的意思
string input("123.456");
vector<int> output;

string::iterator i = input.begin();

parse(i, input.end(), int_ || ('.' >> int_), output);
parse(i, input.end(), -int_ >> -('.' >> int_), output);