std::function
一个可调用对象的包装器,其对象实例可用来包装函数,函数指针,成员函数,静态成员函数,lambda表达式,静态函数,函数对象等,该实例可以被拷贝和移动
实例
对象创建
std::function<int(int)> callback();
//1.对象实例包装一个函数指针
int (*fun_ptr)(int);
int fun1(int a){
return a;
}
int main(int argc, char *argv[]){
std::cout << "Hello world" << std::endl;
fun_ptr = fun1; //函数指针fun_ptr指向fun1函数
callback = fun_ptr; //std::function对象包装函数指针
std::cout << callback(10) << std::endl; //std::function对象实例调用包装的实体
return 0;
}
//2.对象实例包含一个函数
int fun1(int a){
return a;
}
int main(int argc, char *argv[]){
std::cout << "Hello world" << std::endl;
callback = fun1; //std::function包装函数
std::cout << callback(42) << std::endl; //std::function对象实例调用包装的调用实体
return 0;
}
关于函数指针,可以看C语言中文网的函数指针介绍
std::function的存在,可以消除不同可调用对象之间调用的区别,从而使得调用过程变得简单粗暴,它实现了一套类型消除机制,可以统一处理不同的函数对象类型,这种工作在C++11以前是通过函数指针实现的