我正在尝试使用自定义定义的上下文来评估proto表达式树。我有一个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
?