我正在尝试构建一个接受“/ 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序列的附加标题.