Lambdas und überladener [] Operator
-
Kennt ihr boost spirit (x3)?
Man gibt die semantic actions über den Index Operator mit:
const auto rule = x3::alnum[action];
Gibt es einen Trick, hier ein Lambda inline zu schreiben? alnum[[&](... ?
In allen Beispielen, die ich gesehen habe, werden die semantic actions in eigenen Variablen definiert, aber das finde ich sehr "umständlich". Das bläht den Code auf und ich muss mir für jede Kleinigkeit einen Namen ausdenken.
-
Warum nicht phoenix mitbenutzen? Ist doch alles voll in den Beispielen.
Ansonsten fällt mir nur phoenix::bind ein, aber ich weiß nicht wie das val_ etc funktioniert.
-
Nicht qi. x3 benutzt phoenix nicht.
-
Oh sorry, wusste nicht dass es eine neue Spirit version gibt.
parse(first, last, '{' >> int_[([](auto& ctx){ std::cout << _attr(ctx) << std::endl;})] >> '}');
Setz sie doch in Klammern?
(Modifikation von: https://www.boost.org/doc/libs/develop/libs/spirit/example/x3/actions.cpp)
X3 werde ich mir definitiv antun als ständiger spirit Nutzer.
-
Danke. Ich bin gestern auch irgendwann draufgekommen und hatte das dann wieder vergessen. Das ist so trivial, ich muss mich echt fragen, warum ich da überhaupt ein Problem gesehen habe