Boost Spirit qi: Strings parsen?
-
Aus der Dokumentation und den Beispielen habe ich einfach nicht erschließen können, wie man ganz normale Strings parsen kann. Früher ging das in Spirit über Funktionen, die 2 Iteratoren entgegennehmen, aber mit qi gibt es Unmengen von Compiler-Fehlern (VC++ 08). Das ist der typische Template-Kram, aus dem man eigentlich gar nichts erschließen kann. Es liegt aber an der Zeile, in der der einfache Parser erstellt wird:
void result(std::string::iterator begin, std::string::iterator end) { std::cout << std::string(begin, end) << std::endl; } bool r = phrase_parse( first, //string::begin last, //string::end (+qi::char_)[&result], //ohne [&result] geht es ascii::space );
Anscheinend macht man das nicht so, also wie dann?
EDIT 2: Das + ist schon richtig an der Stelle.
-
Das + in Zeile 9 sieht verdächtig aus. Und was für ein Typ ist denn qi::char_? Und was für Parameter nimmt die Funktion an?
-
Janjan schrieb:
Das + in Zeile 9 sieht verdächtig aus. Und was für ein Typ ist denn qi::char_? Und was für Parameter nimmt die Funktion an?
Wenn ich das alles wüsste... Ich brauche jemanden, der sich mit Spirit auskennt und die Frage beantworten kann.
-
Doku lesen und C++ lernen.
-
Nach langem Suchen habe ich tatsächlich etwas gefunden, das ungefähr meinen Vortellungen entspricht:
qi::raw
.Das sieht dann so aus:
void result(const boost::iterator_range<std::string::iterator> &range) { std::cout << std::string(range.begin(), range.end()) << std::endl; }