定义一个返回调用参数函数两次的函数的函数

原题是这样:

定义一个过程 Double, 它以一个有一个参数的过程为参数, Double 返回一个过程, 这一过程将原来那个参数过程应用两次。例如, 若 Inc 是个给参数加一的过程, Double(Inc) 将给参数加二。

那么, 下面的表达式会返回什么值:

Double(Double(Double(Inc)))(5)

我当时的思路是:

using cint = const int; using iFun = function<int(cint&)>; iFun Double (iFun f) { return f(f(?)); }

而问题就在于, 里面的 “?” 该如何处理。 里面是该有个参数, 可是参数从何而来?

后来我才反应过来, 是要返回的函数需要一个参数, 于是应该为:

using cint = const int; using iFun = function<int(cint&)>; iFun Double (iFun f) { return[f] (cint &i) {return f(f(i));}; } int Inc (cint &i) { return (i + 1); } int main () { cout << Double(Double(Double(Inc)))(5); cout << endl; return 0; }

 

你可能感兴趣的:(函数)