Spirit X3 enum Attribute



  • Ich versuche mit boost spirit X3 aus einem String einen enum zu erzeugen.

    const x3::rule<struct some_rule, SomeEnumType> someRule = "someRule";
    const auto some_rule_def = x3::no_case["COLLECTION"][([](auto& ctx) { 
    	x3::_attr(ctx) = SomeEnumType::COLLECTION; 
    })];
    BOOST_SPIRIT_DEFINE(some_rule);
    

    Wenn ich da reindebugge, gibt x3::_attr einen x3::unused_type zurück, und nicht meinen Enum Type.

    Eine Idee, wie man das richtig machen würde?



  • Das war keine rhetorische Frage...



  • Es haben wohl noch nicht so viele Erfahrung mit X3. Mich leider eingschlossen.



  • Und einfach eine Stringliste nehmen und den Eintrag suchen und den als Index benutzen ist wohl keine Option? Ja klar man kann auch BOOST laden um nen Zeichen in einem String zu suchen nur warum? Den Rest meiner Gedanken behalte ich mal jetzt für mich



  • Hast du ansatzweise verstanden, worum es hier geht?



  • Ok, habs hinbekommen. Da gehört ein _val und kein _attr hin. Hätt ich gleich draufkommen können, aber ich find die Doku noch insgesamt verbesserungswürdig.

    Und wahrscheinlich könnte ich hier auch symbols benutzen. Das wollte ich ursprünglich nicht, weil sich die Enum Werte auf völlig unterschiedliche AST Elemente verteilen können, aber das ist vermutlich kein Argument gegen symbols.