У меня есть пара таблиц символов, на которых я хочу блокировать частичное совпадение.Пропустить таблицу символов в качестве унаследованного атрибута для повышения уровня духа.
Прочитав некоторые вопросы, я понял, что это можно сделать, используя 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, но я ищу более простой подход к этой конкретной таблице символов подписи, а не родовым один.)