Оценка дерева выражений прото
Я пытаюсь оценить дерево выражений прото с пользовательским контекстом. у меня есть 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
через контекст?