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 name genau sein soll. In diesem Fall fände ich ein std::string am 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.


Anmelden zum Antworten