2016-04-21 4 views
2

ich derzeit haben:Boost-Geist: zwingen, ein Attribut für ein no-Attribut Parser

start_ %= listrule_ | primrule_ ; 

mit start_ des Attributs eine boost :: Variante zu sein, T> und attrib des primrule_ ist T und listrule_ der attrib ist std :: Vektor.

Dies funktioniert wegen der "attrib Propagregel" des Geistes, glaube ich.

Ich möchte eine dritte Möglichkeit hinzuzufügen:

start_ %= listrule_ | primrule_ | '*'; 

und ich möchte die ‚*‘ auch std :: vector haben, und ich werde einen Weg finden, dass Vektor mit allen möglichen Werten zu füllen des enum T.

Wie lautet die Syntax für die Zuordnung des '*'?

dies im Geist 2, mit C++ 11 steigern 1,58

Antwort

2

Verwenden qi::attr Richtlinie

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

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