boost :: spirit,如何获得占位符的“价值”

时间:2012-12-02 18:21:42

标签: c++ boost boost-spirit

我正在尝试构建一个接受“/ integer /(/ integer /)”形式的字符串的解析器,并生成一个std :: tuple 现在我有:

qi::rule<string::iterator,std::tuple<int,int>()> parser = 
      (qi::int_ >> '(' >> qi::int_ >> ')')[_val = std::make_tuple(qi::_1,qi::_2)]

因为占位符qi :: _ i的类型不正确而无法编译。如何从占位符中“提取”基础值?

1 个答案:

答案 0 :(得分:2)

嗯,你可以使用自动属性传播(又名“自动规则”):

#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/adapted.hpp>
#include <tuple>

namespace qi = boost::spirit::qi;

main( int argc, char* argv[] )
{
    qi::rule<std::string::iterator,std::tuple<int,int>()> parser;

    parser = 
        (qi::int_ >> '(' >> qi::int_ >> ')')
        ;
}

请注意std::tuple适应Fusion序列的附加标题。