Wie erstelle ich ein synthetisiertes Argument aus einer Lambda-Semantik-Aktion von C ++ 11 in Boost Spirit?

8

Ich versuche, einen AST mit Boost Spirit zu bauen, und ich habe mit dem Erstellen synthetischer Argumente gekämpft, wenn ich C ++ 11 Lambda-Ausdrücke als semantische Aktionen benutze.

Sagen Sie, ich habe eine Regel:

qi::rule<char*,ascii::space_type,SomeStruct()> rule = some_parser[[](some_type val){/*code to build SomeStruct from val*/}];

Wie gibt mein Lambda das synthetisierte Argument (SomeStruct) zurück? Durch den Rückgabewert? Weil qi :: _ val in diesem Kontext nicht verfügbar ist, oder? (Dies ist ein wenig unklar für mich, tut mir leid, wenn diese Frage nicht gut formuliert ist)

Vielen Dank im Voraus für jeden Zeiger in die richtige Richtung!

    
djfm 01.10.2012, 17:49
quelle

1 Antwort

7

Das scheint der Trick zu sein: Ссылка

Relevantes Zitat:

%Vor%
  

Der wichtigste Teil hier ist der typedef und sein context_type . Wenn Sie nur C ++ 11 Lambdas verwenden möchten, um sehr einfache Dinge mit Ihrem übergebenen Attribut zu tun, sind die Dinge sehr einfach, aber wenn Sie Zugriff auf die Locals oder qi::_val haben wollen, müssen Sie den Kontextparameter verwenden. Kontext ist eine Instanz von boost::spirit::context mit Vorlagen, die Zugriff auf zwei boost::fusion Sequenzen gewährt. Attribute und Einheimische.

    
djfm 01.10.2012, 18:38
quelle

Tags und Links