0
点赞
收藏
分享

微信扫一扫

QByteArray 用法

大自然在召唤 2023-05-08 阅读 66

C++中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、仿函数。其中,lambda表达式和bind对象是C++11标准中提出的(bind机制并不是新标准中首次提出,而是对旧版本中bind1st和bind2st的合并)。个人认为五种可调用对象中,函数和函数指针本质相同,而lambda表达式、bind对象及仿函数则异曲同工。
 

函数

函数指针

 仿函数

 lambda表达式

bind对象

 

预绑定的参数是以值传递的形式,不预绑定的参数要用std::placeholders(占位符)的形式占位,从_1开始,依次递增,是以引用传递的形式;
std::placeholders表示新的可调用对象的第几个参数,而且与原函数的该占位符所在位置的进行匹配;
bind绑定类成员函数时,第一个参数表示对象的成员函数的指针,第二个参数表示对象的地址,这是因为对象的成员函数需要有this指针。并且编译器不会将对象的成员函数隐式转换成函数指针,需要通过&手动转换;
std::bind的返回值是可调用实体,可以直接赋给std::function。

function

std::function是一个函数包装器,该函数包装器模板能包装任何类型的可调用实体,如普通函数,函数对象,lamda表达式等。包装器可拷贝,移动等,并且包装器类型仅仅依赖于调用特征,而不依赖于可调用元素自身的类型。std::function是C++11的新特性,包含在头文件<functional>中。

function包装函数

 function包装函数指针

 

 function包装仿函数

 function包装lambda表达式

 function包装bind对象

 

参考(20条消息) 【C++】C++11的std::function和std::bind用法详解_Yngz_Miao的博客-CSDN博客

举报

相关推荐

0 条评论