Boost Spirit:在无属性解析器上强制一个属性
Boost Spirit: force an attribute on a no-attribute parser
我目前有:
start_ %= listrule_ | primrule_ ;
start_ 的属性是 boost::variant,T> primrule_ 的属性是 T,listrule_ 的属性是 std::vector。
我相信这是因为精神"attrib propagation rule"。
我想补充第三种可能性:
start_ %= listrule_ | primrule_ | '*';
我希望“*”也有 std::vector,我会找到一种方法用枚举 T 的所有可能值填充该向量。
赋予“*”的语法是什么?
这是精神 2,使用 c++11,提升 1.58
使用qi::attr
指令
enum MyEnum { A, B, C, D, E };
start_ %= listrule_
| primrule_
| ('*' >> qi::attr(std::vector<MyEnum> { A, B, C, D, E })
;
我目前有:
start_ %= listrule_ | primrule_ ;
start_ 的属性是 boost::variant,T> primrule_ 的属性是 T,listrule_ 的属性是 std::vector。
我相信这是因为精神"attrib propagation rule"。
我想补充第三种可能性:
start_ %= listrule_ | primrule_ | '*';
我希望“*”也有 std::vector,我会找到一种方法用枚举 T 的所有可能值填充该向量。
赋予“*”的语法是什么?
这是精神 2,使用 c++11,提升 1.58
使用qi::attr
指令
enum MyEnum { A, B, C, D, E };
start_ %= listrule_
| primrule_
| ('*' >> qi::attr(std::vector<MyEnum> { A, B, C, D, E })
;