评估proto表达式树

时间:2017-04-12 10:45:45

标签: c++ boost-proto

我正在尝试使用自定义定义的上下文来评估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_tproto::make_exr<exp_tag>而成为表达式,所以我无法将其视为proto::tag,但我无法弄清楚该如何做此

我应该将proto::tag::plus替换为什么才能通过上下文评估exp_t

0 个答案:

没有答案