标签:
原题是这样:
定义一个过程 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;
}
标签:
原文地址:http://www.cnblogs.com/wuOverflow/p/4281746.html