2

我正在尝试创建一个纯函数,它返回两个其他纯函数的乘法:

pure Func multiplyFunctions(Func,Real)(scope const Func f1, scope const Func f2)
{
    return (Real a) { return f1(a) * f2(a); };
}

不幸的是,我遇到了问题,第一,我想将 f1 和 f2 声明为定义了 opCall 的纯函数/委托/类......这是必需的,因为我从纯函数调用它们。

但是第二点,似乎是最有问题的,是我希望 f1 和 f2 成为一个函数,返回一个“真实”值的“真实”变量......但我不知道如何模板化这个出...

有人有想法么?

4

1 回答 1

3

首先,删除scope; 这是错误的,因为代表的范围被转义了。

其次,尝试类似:

real delegate(real) multiplier(const real delegate(real) pure f1,
                               const real delegate(real) pure f2) pure
{
    real multiply(real val) { return f1(val) * f2(val); }
    return &multiply;
}

您也可以尝试使用模板执行此操作,尽管没有太多理由:

pure auto multiplier(alias F1, alias F2)(ParameterTypeTuple!F1 args)
{
    return F1(args) * F2(args);
}

real square(real a) pure { return a * a; }

alias multiplier!(square, square) squareMultiplier;

//Now squareMultiplier is a multiplier of square()

请注意,编译器中存在不允许纯度 100% 正确的错误,因此您现在只需要忍受它们

于 2011-07-24T07:49:18.640 回答