Boost.Spirit -> Suche Template-Parameter von boost::fusion::vector<>
-
Hallo,
folgender Codeabschnitt:
url_parser() : qi::grammar<Iterator>(start){ ... name = +(qi::alnum | qi::char_('-') | qi::char_('_')); }Wie erkenne ich hier, was die Template-Parameter des
boost::fusion::vector<>sind?boost::fusion::vector<std::vector<char>>ist es jedenfalls nicht.Gibt es vielleicht - so nebenbei - eine Methode, um selber bestimmen zu können, was
namegenau sein soll. In diesem Fall fände ich einstd::stringam passendsten.Also hier nochmal etwas Code, um zu verdeutlichen, was ich will:
template<typename Iterator> class url_parser : public qi::grammar<Iterator>{ ... void f(boost::fusion::vector<std::vector<char>> ) {} // falscher Datentyp. Hübsch fände ich std::string public: url_parser() : qi::grammar<Iterator>(start){ using std::placeholders::_1; name = +(qi::alnum | qi::char_('-') | qi::char_('_')) [std::bind(&url_parser<Iterator>::f, this, _1)]; ... } };
-
In der Compilerfehlermeldung müßte doch der erwartete Datentyp stehen.
-
Hallo,
der Fehler war, dass [] eher bindet, als +. Ich hab nun folgendes gemacht:
name = (+(qi::alnum | qi::char_('-') | qi::char_('_')))[...];und nun klappts.