Оценка дерева выражений прото

Я пытаюсь оценить дерево выражений прото с пользовательским контекстом. у меня есть struct exp_tag {} используя который создать терминал

template <typename T>
inline typename proto::result_of::make_expr<exp_tag, T const &>::type
exp_t(T const &t) {
  return proto::make_expr<exp_tag>(boost::cref(t));
}

Я создаю дерево выражений следующим образом:

exp_t(x)

И дерево выглядит так

7exp_tag( 
    terminal(6tensorILm0EE) 
)

В моем контексте я оцениваю дерево с помощью перегрузок функций:

template<typename A, typename B>
float operator()(proto::tag::plus, A& a, B& b) const {
    auto va = proto::eval(a, *this);
    auto vb = proto::eval(b, *this);
    return va + vb;
}

Когда я пытаюсь сделать это для моего exp_t заменив proto::tag::plus с exp_tag мой код не компилируется

Я думаю, что с exp_t это выражение из-за proto::make_exr<exp_tag> Я не могу относиться к этому как proto::tag но я не могу понять, как это сделать.

Что я должен заменить proto::tag::plus с тем, чтобы оценить exp_t через контекст?

0 ответов

Другие вопросы по тегам