我正在尝试构建一个可以处理符号区分的EDSL。在功能方面我遇到了麻烦。
struct Derivative
: or_<
when<
terminal<unknown>
, boost::mpl::int_<1>()
>
, when<
terminal<_>
, boost::mpl::int_<0>()
>
, proto::when<
proto::function<proto::literal<function<1> >, Derivative>
, proto::_make_function(proto::_left, Derivative(proto::_right))
>
, proto::when<
proto::function<proto::literal<function<2> >, Derivative>
, proto::_make_function(proto::_left, Derivative(proto::_right))
>
, otherwise<_>
> {};
在这个结构的最后部分中,我分别捕获函数,因为我希望能够传递除proto::_left
之外的其他内容作为要应用的函数。
EG。 proto::literal<function<2> >
对应于tanh函数,我的上下文将其评估为tanh。但是,当我在表达中看到我想要的导数时,在我的Derivative
结构中,我希望能够说出
proto::when<
proto::function<proto::literal<function<2> >, Derivative>
, proto::_make_function(proto::literal<function<7> >, Derivative(proto::_right))
>
proto::literal<function<7> >
对应于tanh的渐变。
当我尝试这个时,我的代码无法编译。
我怎样才能正确地做到这一点?