提升精神:在无属性解析器上强制使用属性

时间:2016-04-21 15:35:26

标签: boost boost-spirit

我目前有:

start_ %= listrule_ | primrule_ ;

start_的属性是boost :: variant,T>和primrule_的属性是T,而listrule_的属性是std :: vector。

这是因为我相信精神的“归因传播规则”。

我想增加第三种可能性:

start_ %= listrule_ | primrule_ | '*';

我希望'*'也有std :: vector,我会找到一种方法用enum T的所有可能值填充该向量。

归因于'*'的语法是什么?

这是精神2,c ++ 11,提升1.58

1 个答案:

答案 0 :(得分:2)

使用qi::attr指令

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

start_ %= listrule_ 
        | primrule_ 
        | ('*' >> qi::attr(std::vector<MyEnum> { A, B, C, D, E })
        ;