Question

Au code suivant, j'essaie d'utiliser Boost Spirit Auto Parser pour une séquence ou deux doubles, mais il ne se compile pas. Qu'est-ce que je fais de mal ici?

// file main.cpp

#include <boost/tuple/tuple.hpp>
#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;

int main()
{
    boost::tuple<double, double> p;
    char* i = 0;
    qi::phrase_parse( i, i, p, qi::space );
    // qi::phrase_parse( i, i, qi::double_ >> qi::double_, qi::space, qi::skip_flag::postskip, p );

    return 0;
}

La ligne commentée compile, donc elle accepte boost::tuple<double, double> Comme le type d'attribut de qi::double_ >> qi::double_; mais il n'obtient pas l'analyseur à partir du type d'attribut. Pourquoi?

Était-ce utile?

La solution

C'est la même réponse que dans votre autre question - utilisation boost::fusion::vector Au lieu.

Autres conseils

Il compile pour moi (G ++ 4.6.1 / Boost 1.46.1) si j'ajoute l'inclusion suivante à votre programme:

#include <boost/fusion/adapted/boost_tuple.hpp>

Je crois que cela adapte Boost :: Tuple pour être un boost conforme :: séquence de fusion, requis par la règle d'attribut composé de séquence:

http://www.boost.org/doc/libs/1_48_0/libs/spirit/doc/html/spirit/qi/quick_reference/compound_attribute_rules.html

Graham

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top