C++·包装器

发布于:2025-04-06 ⋅ 阅读:(76) ⋅ 点赞:(0)

目录

function

包装各种可调用对象

包装类成员函数

应用举例

bind

一般形式

arg_list

调整参数顺序

调整参数个数(绑死)

应用举例

小知识


function

包含在<functional>头文件中,是一个类模版,但本质还是仿函数。

std::function的实例对象可以包装存储其他的可以调用对象,包括函数指针、仿函数、lambda、bind表达式等。存储的可调用对象称为它的目标。如果不含目标,则称其为空。

注:1.调用空的std::function 的目标将抛std::bad_function_call异常。

2.返回值类型和参数类型要相同

包装各种可调用对象

对于仿函数FUN,一搬使用struct,而不用class QEQ

包装类成员函数

this指针不能显式传递。

应用举例

map映射string和function

这种方式可拓展性强,并且比较省力。

bind

也包含在<functional>头文件中,是一个函数模版,本质也是仿函数。

是一个可调用对象的包装器,可以看做一个函数适配器,对接收的可调用对象进行处理后返回一个可调用对象。

可以用来调整参数个数和顺序。

一般形式

auto newCallable = bind(callable,arg_list);   

newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。

当调用newCallable时,newCallable会调用callable,并传给它arg_list中的参数。

arg_list

arg_list中的参数可能包含形如_n的名字,n是一个正整数,这些参数作为占位符,表示newCallable的参数,它们占据了传递给newCallable的参数的位置。数值n表示生成的可调用对象中参数的位置:_1为newCallable的第一个参数,_2为第二个,依次向后类推。

注:这些占位符在placeholders的一个命名空间中,使用时要展开。

调整参数顺序

相当于5传给了b,23传给了a。

调整参数个数(绑死)

注意,传常量时,该常量会与指定位置的参数绑死,其他参数再按顺序_1,_2......

应用举例

在使用包装器包装类成员函数时,直接将成员函数对象绑死,就不需要每次都传了,所以bind多用于绑死一些固定参数。

小知识

1..C++11中去除了auto声明自动类型变量的功能,只可以用来进行变量类型推导。

2.auto不能推导函数参数的类型,因为函数在编译时,还没有传递参数,因此在编译时无法推演出形参的实际类型。


网站公告

今日签到

点亮在社区的每一天
去签到