Автоматический анализатор Boost Spirit не работает для кортежа двойных значений

StackOverflow https://stackoverflow.com/questions/9443131

Вопрос

В следующем коде я пытаюсь использовать Автопарсер Boost Spirit для последовательности или двух двойных значений, но он не компилируется.Что я здесь делаю не так?

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

Закомментированная строка компилируется и принимает boost::tuple<double, double> как тип атрибута qi::double_ >> qi::double_;но ему не удается получить синтаксический анализатор из типа атрибута.Почему?

Это было полезно?

Решение

Это тот же ответ, что и в вашем другой вопрос - использовать boost::fusion::vector вместо.

Другие советы

Он компилируется для меня (g++ 4.6.1/boost 1.46.1), если я добавляю в вашу программу следующее:

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

Я считаю, что это адаптирует boost::tuple в соответствующую последовательность boost::fusion, требуемую правилом составного атрибута последовательности:

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

Грэм

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top