使用boost原型进行符号分化

时间:2017-04-08 09:27:48

标签: c++ boost-proto

我正在尝试构建一个可以处理符号区分的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的渐变。

当我尝试这个时,我的代码无法编译。

我怎样才能正确地做到这一点?

0 个答案:

没有答案