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的详解,这个需要说的是重载了操作符()的类也称为可调用对象。