作用:
可以对函数指针(包括全局函数,类成员函数,类静态成员函数),lambda表达式,仿函数做类型消除,也就是说可以将这些可调用实体都转换成std::function
类型。
使用示例
#include <iostream>
using namespace std;
void global_func(int a){//全局函数
cout<<"call global_func:"<<a<<endl;
}
auto labmda = [](int a){cout<<"lambda:"<<a<<endl;};
class ClassA{
public:
void member_func(int a){//类成员函数
cout<<"call ClassA::member_func:"<<a<<endl;
}
static void static_member_func(int a){//类静态函数
cout<<"call ClassA::static_member_func:"<<a<<endl;
}
};
class Functor{//仿函数
public:
void operator()(int a){
cout<<"call Functor()"<<a<<endl;
}
};
int main(int argc, const char * argv[]) {
function<void(int)> func;
func = global_func;
func(10);
func = labmda;
func(11);
Functor testFunctor;
func = testFunctor;
func(12);
ClassA a_object;
func = std::bind(&ClassA::member_func, &a_object, std::placeholders::_1);
func(13);
func = std::bind(&ClassA::static_member_func, std::placeholders::_1);
func(14);
return 0;
}
输出结果:
call global_func:10
lambda:11
call Functor()12
call ClassA::member_func:13
call ClassA::static_member_func:14
注意事项
- 转换后的
std::function
的参数 能转换成 转换前的可调用实体的参数 - 转换前的可调用实体的返回值 能转换成 转换后的
std::function
的返回值 -
std::function
对象不能用来比较相等或者不等,但是可以用来跟nullptr
,NULL
比较