我正在尝试创建一个返回两个其他纯函数乘法的纯函数:
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是一个函数,“Real”变量返回一个“Real”值...但我无法弄清楚如何模板化......
有人有什么想法吗?
答案 0 :(得分: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%正确,因此您现在必须忍受它们。