我正在尝试使用自定义定义的上下文评估原型表达式树。我有一个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
通过上下文进行评估,我应该用什么替换?