Boost Spirit:在无属性解析器上强制一个属性

Boost Spirit:在无属性解析器上强制一个属性,boost,boost-spirit,Boost,Boost Spirit,我目前有: start_ %= listrule_ | primrule_ ; 当start\的属性是boost::variant时,T>和primrule\的attrib是T,listrule\的attrib是std::vector 我相信这是因为spirit的“属性传播规则” 我想添加第三种可能性: start_ %= listrule_ | primrule_ | '*'; 我希望“*”也有std::vector,我将找到一种方法,用枚举T的所有可能值填充该向量 赋予“*”属性的语法是

我目前有:

start_ %= listrule_ | primrule_ ;
当start\的属性是boost::variant时,T>和primrule\的attrib是T,listrule\的attrib是std::vector

我相信这是因为spirit的“属性传播规则”

我想添加第三种可能性:

start_ %= listrule_ | primrule_ | '*';
我希望“*”也有std::vector,我将找到一种方法,用枚举T的所有可能值填充该向量

赋予“*”属性的语法是什么


这是在spirit 2中,使用c++11,boost 1.58使用
qi::attr
指令

enum MyEnum { A, B, C, D, E };

start_ %= listrule_ 
        | primrule_ 
        | ('*' >> qi::attr(std::vector<MyEnum> { A, B, C, D, E })
        ;
enum MyEnum{A,B,C,D,E};
开始\u%=列表规则\u
|primrule_
|('*'>>qi::attr(std::vector{A,B,C,D,E})
;