美文网首页
std::function与std::bind

std::function与std::bind

作者: 爱疯儿 | 来源:发表于2017-06-28 10:42 被阅读0次

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;//对成员变量进行赋值

相关文章

网友评论

      本文标题:std::function与std::bind

      本文链接:https://www.haomeiwen.com/subject/dytucxtx.html