我正在尝试构建一个可以处理符号差异的 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
要应用的函数之外的其他内容。
例如。proto::literal<function<2> >
对应于 tanh 函数,我的上下文会将其评估为 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的梯度。
当我尝试这样做时,我的代码无法编译。
我怎样才能正确地做到这一点?