封装器WRAPPERS

封装器有很多种,它实质上是个模版。
书中提出了一个概念,叫callable类型,啥叫callable类型?说实话我也不知道,但是可以猜一猜。Callable英文的意思是随时可偿还的,随时可支付的。它的一个典型代表就是把函数的返回值赋给某个变量的情况。如下图所示:



Callable可以被称为可回收类型,那就这样吧。
书中举的例子是,一个模版接受了函数对象或者函数指针再或者lambda表达式作为参数,这个参数有些特殊,因为它看起来有点像函数,那就直接叫它函数吧,这个函数接收相同类型的参数并且返回相同类型的参数。模版每接受一次这样的函数参数就实例化一次,且各实例各不相同,但是这是没有必要的,因为函数参数的参数和返回值都是同样的类型,只用一个实例就够了,那么多实例实在是浪费,且低效。
像这样的函数参数就叫做callable参数,如下图红框所示:




书中是用函数封装器解决这一问题的。
如上图所示,这是一个函数封装器,它生成了一个对象fdci,类型就是double(char,int)其中,char和int是参数类型,double是返回值类型。

然后每个函数封装器对象指向一个或者是函数或者函数对象或者lambda表






达式。这样的话像下图所示的模版实例就是同一个了。
但是,上述一个函数对应一个函数封装器对象的写法比较麻烦,于是产生了下面的写法。
1、函数封装器可以直接接收实参,这个参数就是函数、函数指针、函数对象或者LAMBDA表达式。
2、你也可以直接在函数模版的类型参数位置上放置模版函数封装器类型的参数。如下图所示:
由上图可见这俩类型是相同的。
另外,使用函数封装器必须要引入头文件functional。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 8,723评论 1 52
  • 在C++11中,我们还是会看到一些新元素。这些新鲜出炉的元素可能会带来一些习惯上的改变,不过权衡之下,可能这样的改...
    认真学计算机阅读 5,098评论 1 27
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 129,402评论 18 137
  • 注:之前关于Java8的认知一直停留在知道有哪些修改和新的API上,对Lambda的认识也是仅仅限于对匿名内部类的...
    mualex阅读 2,446评论 1 4
  • lambda表达式(又被成为“闭包”或“匿名方法”)方法引用和构造方法引用扩展的目标类型和类型推导接口中的默认方法...
    183207efd207阅读 1,221评论 0 5
  • 姓名:曾雪芳 七月份目标:亲推5个B1D 推荐:分享4人. 学习:于达老师的~~如何精准化管理目标 感受:一个亲戚...
    VitaZeng阅读 107评论 0 0
  • 风总,你要的女人到了!不过她被抓了,现在在拍卖会上,是你亲自去买还是我叫别人去 不用,我亲自去...
    丽娘娘阅读 345评论 0 0
  • 我走在湖边的小道上 风将衣角扒开,进入了身体 我能听到回音 我很高兴,我装有风 不久它会吹走 我看见来来去去的人 ...
    紫发阅读 89评论 0 0
  • 乍暖还寒,梦醒倚雕栏,壮志凌云英雄剑,转眼两鬓斑斑,功名已随云烟,心付瑶琴弦断,长夜枕卷解忧,晓窗残月无眠。
    刀剑如梦_4f6d阅读 231评论 5 12