原题是这样:
定义一个过程 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; }
时间: 2024-10-14 20:56:28