1、std::function是可調(diào)用對象的包裝器哎媚,可以實現(xiàn)延時調(diào)用租漂。
std::funcion可以將類方法及類強轉(zhuǎn)成函數(shù)方法阶女,類方法需要聲明為靜態(tài)方法,類需要重載符號()哩治。
void func(){std::cout << __FUNCTION__ <<endl;}
class A{static int func(int a){return a;}};
class B{int operator()(int a){return a;}};
std::function<void(void)> f1 = func; f1();//綁定普通方法
std::function<int(int)> f2 = A::func; f2(100); //綁定類的靜態(tài)成員函數(shù)
B b; f2 = b; f2(200);//綁定仿函數(shù)
2秃踩、std::bind用來將可調(diào)用對象與其參數(shù)一起進行綁定。綁定后可以使用std::function進行保存业筏,并延時到我們需要的時候調(diào)用:
(1)將可調(diào)用對象與其參數(shù)綁定成一個仿函數(shù)憔杨;
(2)可綁定部分參數(shù)。在綁定部分參數(shù)的時候蒜胖,通過使用std::placeholders來決定空位參數(shù)將會是調(diào)用發(fā)生時的第幾個參數(shù)芍秆。
class A{int i_ = 0;//C++11允許非靜態(tài)成員在類內(nèi)初始化
public int fun(int a, int b){return a;} ?}
A a; std::function<int(int,int)> f = std::bind(&A::fun, &a, std::placeholders::_1, std::placeholders::_2); f(1,2);//綁定成員函數(shù),保存為仿函數(shù)
//綁定成員變量
std::function<int&(void)> f2 = std::bind(&A::i_, &a); f2() = 100;//對成員變量進行賦值