2012-02-25 6 views
0

В следующем коде я пытаюсь использовать Boost Spirit Auto Parser для последовательности или двух двухместных, но он не компилируется. Что я здесь делаю неправильно?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_; но он не может получить парсер из типа атрибута. Зачем?

ответ

1

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

0

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

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

Я считаю, что это приспосабливает повышение :: кортеж быть соответствующий импульс: : последовательность слияния, требуется по правилу атрибута соединения последовательности:

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

Graham