封装器WRAPPERS

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



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




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

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






达式。这样的话像下图所示的模版实例就是同一个了。
但是,上述一个函数对应一个函数封装器对象的写法比较麻烦,于是产生了下面的写法。
1、函数封装器可以直接接收实参,这个参数就是函数、函数指针、函数对象或者LAMBDA表达式。
2、你也可以直接在函数模版的类型参数位置上放置模版函数封装器类型的参数。如下图所示:
由上图可见这俩类型是相同的。
另外,使用函数封装器必须要引入头文件functional。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容