C++11新特性之std::function & std::bind

C++11引入的std::function模板类突破了回调函数的限制,能够存储并调用各种可调用实体,如全局函数、成员函数、lambda表达式和仿函数等。std::function通过其多用途功能简化了编码,提供了一种统一的方式来处理不同类型的函数。文章详细介绍了如何实例化和使用std::function,以及与std::bind的结合应用。
摘要由CSDN通过智能技术生成

std::function

在c++98&03时我们通常使用回调函数来处理一些需要某种场景下才触发的回调操作,但回调函数有一个限制就是它只能赋值给同类型的全局或者静态函数,对于其他有相同的返回值和相同类型参数的成员函数不能赋值。

#include <iostream>
using namespace std;

//define a callback func
typedef void(*CALL_BACK)(void);

//global func
void show(void)
{
	cout << "show global func" << endl;
}

class A
{
public:
	//member func
	void show_class_num(void ){ cout << "show member func" << endl; }

	//static member func
	static void show_class_num_static(void ){ cout << "show static member func" << endl; }
};

int main()
{
	CALL_BACK call;
	//assign a global func to callback func
	call = show;
	call();
	//error 
	call = A::show_class_num;

	//assign a static member func
	call = A::show_class_num_static;
	call();
	return 0;
}
在了解C++11中引入的std::function前,首先我们需要了解C++中有关可调用实体(callable target)的相关概念,C++中包含了几种可调用对象:函数,函数指针,lambda表达式,std::bind创建的对象,以及重载了()操作符的类。函数以及函数指针这个就不用介绍了,有关lambda表达式也是C++11引入的一个新特性,就地创建匿名表达式,读者可以参阅相关介绍lambda的文章,我后续也会写一篇关于lambda的详解,这个需要说的是重载了操作符()的类也称为可调用对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值