c – 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不是正确的类型而没有编译.如何从占位符“提取”基础值?

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

#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序列的附加标题.

点赞