Pergunta

No código a seguir estou tentando usar Boost Spirit Auto Analisador para uma sequência ou duas duplas, mas não compila.O que estou fazendo de errado aqui?

// 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;
}

A linha comentada compila, então aceita boost::tuple<double, double> como o tipo de atributo de qi::double_ >> qi::double_;mas não consegue obter o analisador do tipo de atributo.Por que?

Foi útil?

Solução

É a mesma resposta que na sua outra questão - usar boost::fusion::vector em vez de.

Outras dicas

Ele compila para mim (g++ 4.6.1/boost 1.46.1) se eu adicionar o seguinte include ao seu programa:

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

Acredito que isso adapta boost::tuple para ser uma sequência boost::fusion em conformidade, exigida pela regra de atributo composto Sequence:

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

Graham

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top