我有几个符号表,我想在其中禁止部分匹配。
阅读一些问题,我认为可以使用distinct directive
完成。
但是,每次在语法中引用符号表时添加distinct(char_("a-zAZ09_"))[no_case[my_symb_1]];
都会降低可读性。因此,我试图制定一个接受符号表并返回其匹配值的规则:
qi::rule<Iterator, Operation(const qi::symbols<char, Operation>&)> no_partial_match;
no_partial_match %= distinct(char_("a-zAZ09_"))[no_case[lazy(_r1)]];
并在后面的语法中使用它:
some_rule = no_partial_match(my_symb_1) >> int_;
但是它失败了:
const boost::spirit::qi::symbols<char,Operation,boost::spirit::qi::tst<Char,T>,boost::spirit::qi::tst_pass_through>::adder
&boost::spirit::qi::symbols<Char,T,boost::spirit::qi::tst<Char,T>,boost::spirit::qi::tst_pass_through>::adder::operator
()(const Iterator &,const Iterator &,const T &) const': expects 3 arguments - 1 provided
如何实现呢?
(PS:我知道注释here中提供的通用解决方案,但是我正在寻找一种针对此特定符号表签名的更简单方法,而不是通用方法。)
最佳答案
知道了,必须将符号表包装在phx::ref(...)
中
像这样
some_rule = no_partial_match(phx::ref(my_symb_1)) >> int_;
关于c++ - 将符号表作为继承属性传递以增强精神规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35981032/