码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-09 17:50:28      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

原题是这样:

定义一个过程 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!