我有几个符号表,我想在其上禁止部分匹配。
阅读一些问题,我认为可以使用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中提供的通用解决方案,但我正在为这个特定的符号表签名寻找一种更简单的方法,而不是通用的方法。)
答案 0 :(得分:1)
知道了,必须将符号表包装在InvoiceableDate CompanyID Single client from this company?
4/30/2012 4:00 30003134 False
4/30/2012 4:00 30003134 False
4/30/2012 4:00 1000009602 True
4/30/2012 4:00 1075000 True
4/30/2012 4:00 30003134 False
4/30/2012 4:00 30003134 False
phx::ref(...)