Pregunta

En el siguiente código estoy intentando usar Analizador automático Boost Spirit para una secuencia o dos dobles, pero no se compila.¿Qué estoy haciendo mal aquí?

// 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 línea comentada se compila, por lo que acepta. boost::tuple<double, double> como el tipo de atributo de qi::double_ >> qi::double_;pero no puede obtener el analizador del tipo de atributo.¿Por qué?

¿Fue útil?

Solución

Es la misma respuesta que en tu otra pregunta - usar boost::fusion::vector en cambio.

Otros consejos

Se compila para mí (g++ 4.6.1/boost 1.46.1) si agrego la siguiente inclusión a su programa:

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

Creo que esto adapta boost::tuple para que sea una secuencia boost::fusion conforme, requerida por la regla de atributo compuesto de secuencia:

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

graham

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top