2016-03-14 3 views
0

У меня есть пара таблиц символов, на которых я хочу блокировать частичное совпадение.Пропустить таблицу символов в качестве унаследованного атрибута для повышения уровня духа.

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

ответ

1

Got он, должен обернуть таблицу символов в phx::ref(...)

как это

some_rule = no_partial_match(phx::ref(my_symb_1)) >> int_; 

 Смежные вопросы

  • Нет связанных вопросов^_^