作用:
可以對函數(shù)指針(包括全局函數(shù),類成員函數(shù),類靜態(tài)成員函數(shù)),lambda表達(dá)式贡避,仿函數(shù)做類型消除战转,也就是說可以將這些可調(diào)用實(shí)體都轉(zhuǎn)換成std::function
類型搜立。
使用示例
#include <iostream>
using namespace std;
void global_func(int a){//全局函數(shù)
cout<<"call global_func:"<<a<<endl;
}
auto labmda = [](int a){cout<<"lambda:"<<a<<endl;};
class ClassA{
public:
void member_func(int a){//類成員函數(shù)
cout<<"call ClassA::member_func:"<<a<<endl;
}
static void static_member_func(int a){//類靜態(tài)函數(shù)
cout<<"call ClassA::static_member_func:"<<a<<endl;
}
};
class Functor{//仿函數(shù)
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;
}
輸出結(jié)果:
call global_func:10
lambda:11
call Functor()12
call ClassA::member_func:13
call ClassA::static_member_func:14
注意事項(xiàng)
- 轉(zhuǎn)換后的
std::function
的參數(shù) 能轉(zhuǎn)換成 轉(zhuǎn)換前的可調(diào)用實(shí)體的參數(shù) - 轉(zhuǎn)換前的可調(diào)用實(shí)體的返回值 能轉(zhuǎn)換成 轉(zhuǎn)換后的
std::function
的返回值 -
std::function
對象不能用來比較相等或者不等,但是可以用來跟nullptr
槐秧,NULL
比較