在下面的代码中,我尝试将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_
的属性类型;但它无法从属性类型中获取解析器。为什么呢?
答案 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序列:
格雷厄姆