Boost Spirit Auto Parser因双打元组而失败

时间:2012-02-25 10:17:37

标签: c++ parsing auto boost-spirit-qi boost-tuples

在下面的代码中,我尝试将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 个答案:

答案 0 :(得分:1)

other question中的答案相同 - 请改为使用boost::fusion::vector

答案 1 :(得分:0)

如果我在你的程序中添加以下内容,它会为我编译(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

格雷厄姆