【C++笔记】std::function的使用

std::function 是C++11新增的特性,第一次在代码中遇见它有一种我好像知道它的干嘛的,但是我不确定各种用法对不对。所以还是要对这个新特性进行系统性的学习和总结。本文主要参考了C++Primer(第5版)

一,可调用对象与function

不同类型可能具有相同的调用形式

C++中可调用的对象有函数,函数指针,lambda表达式,bind创建的对象以及重载了函数调用运算符的类。这些不同类型的对象却可以共享同一种调用形式,例如

//普通函数
int add (int i,int j){return i+j;}
//lambda表达式
auto mod=[ ](int i,int j){return i*j;};

尽管这两种可调用对象的类型不同,对参数进行的操作也不同,但是却共享同一种调用方式,即

int(int,int)

二,标准库function类型

function是一个模板,在创建一个具体的function类型的时候我们必须表示对象的调用形式,如:

function<int(int,int)>

这表示我们声明了一个function类型,它可以表示接受两个int并返回一个int的可调用对象

function<int(int,int)> f1=add;
function<int(int,int)> f2=[ ](int i,int j){return i+j;};

三,重载和函数与function

我们不能直接将重载函数的名字传入function类型的对象中

int add(int i,int j){return i+j;};
int add(double i,double j){return i*j};
function<int(int,int)> f3=add;//报错

取而代之的是,我们可以使用函数指针

int(*fp)(int,int)=add;
function<int(int,int)>f4 =fp;

四,例子

当然,如果只是工作中遇到一个简单的例程我也不会对它印象深刻。实际上,我读到的这段代码包含了function类,函数回调,lambda表达式三位一体的代码

using TemplateCallBack=std::function<void(char* buf,int len)>;

TemplateCallBack t1;

void registerCallBack(TemplateCallBack callback)
{
	t1=callback;
}
int main()
{
	registerCallBack([ ](char* buf,int len){
		cout<<buf<<len<<endl;
	});
	
	t1("hello world",1);
	t1("HELLO WORLD",2);
}
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值