Boost Spirit Auto Parser не работает для кортежа двойников - PullRequest
0 голосов
/ 25 февраля 2012

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

// 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_; но он не может получить анализатор из типа атрибута. Почему?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

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

0 голосов
/ 25 марта 2012

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

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

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

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

Грэм

...