1、std::function是可调用对象的包装器,可以实现延时调用。
std::funcion可以将类方法及类强转成函数方法,类方法需要声明为静态方法,类需要重载符号()。
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); //绑定类的静态成员函数
B b; f2 = b; f2(200);//绑定仿函数
2、std::bind用来将可调用对象与其参数一起进行绑定。绑定后可以使用std::function进行保存,并延时到我们需要的时候调用:
(1)将可调用对象与其参数绑定成一个仿函数;
(2)可绑定部分参数。在绑定部分参数的时候,通过使用std::placeholders来决定空位参数将会是调用发生时的第几个参数。
class A{int i_ = 0;//C++11允许非静态成员在类内初始化
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);//绑定成员函数,保存为仿函数
//绑定成员变量
std::function<int&(void)> f2 = std::bind(&A::i_, &a); f2() = 100;//对成员变量进行赋值