0

在下面的代码中,我尝试将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_。但它无法从属性类型中获取解析器。为什么?

4

2 回答 2

1

这与您的其他问题的答案相同-请boost::fusion::vector改用。

于 2012-03-14T19:30:42.047 回答
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

格雷厄姆

于 2012-03-25T02:03:50.643 回答