Boost :: spirit :: qi, определяющий калькулятор для нулевых значений

я пытаюсь написать синтаксический анализатор для математических выражений, где именованные переменные являются нулевыми вboost::spirit (версия 1_51_0), к которой ям совершенно новый. Я определяюtypedef boost::function Value и мои правила будут объявлены так:qi::rule expression, term, others, ...;

Я определяю бинарные операторы на nullaries с помощью этого макроса

#define BINARY_FUNCTOR(name, op)                        \
struct name                                             \
{                                                       \
  name(Value x, Value y): x_(x), y_(y) {}               \
  double operator()() { return x_() op y_(); }          \
  Value x_, y_;                                         \
}; 

и имеют ,ADDSUBи т. д. Из приведенных мной примеровЯ видел, яя ожидал, что правила будут определены следующим образом:

expression = term
             >> *( (lit('+') >> term[ADD(_val, _1)])
                 | (lit('-') >> term[SUB(_val, _1)])
                 );

но это некажется, правильный синтаксис, так как я получаю сообщение об ошибке

boost/spirit/home/support/action_dispatch.hpp:162: error: no match for call to ‘(const::SUB) (boost::function&, boost::spirit::context&, bool&)’
SRParser.cpp:38: note: candidates are: double::SUB::operator()()

который выглядит для меня как_1 ISN»т, что я ожидаю, а именноValue связано со следующим сроком. Какие'правильный синтаксис для определения правила, как это?

Ответы на вопрос(1)

Ваш ответ на вопрос