std::bind函数的:
将指定的可调用的实体(函数,变量)的参数绑定到已有的变量,或者常量里面,产生一个新的可调用实体(不是直接取原函数的地址,而是构造出一个全新的函数)。返回的是一个类型安全的函数类型,可以用auto变量去接(局部变量),或者用std::function类(类的成员)去接收即可。
其实就是后者更加正式一点,前者就随意一些。绑定的内容是值传递,可以是变量或者是常量值,而用placeHolder进行绑定的话,是引用参数,应该是const 引用类型。如果是成员函数的绑定,this指针可以通过绑定对象或者指针来进行绑定。通常绑定一个类的成员函数的第二个参数,就是this,需要传递具体的一个对象进去的,或者如果本来就是成员函数中进行bind的话,直接传递this进去就行了。
其实一般情况下,都是一个空值,只要那个被绑定函数没有操作this即可。这种重新生成的好处,就是用于回调函数。相当于新生成一个和当前类无关的函数,可以送给其他类,进行调用,这样其他类就可以通过函数访问本类所对应的对象的一系列数据。
常见的一个应用:一个类的对象需要获取到另一个类的对象所存储的数据,比如Session数据,可以在第一个类中定义一个std::function成员变量,在类2的对象生成类1对象的时候,对类1的function成员进行赋值(bind一个新的函数给std::function)。相当于在一个成员函数中创造一个函数,给类1的对象。即在对象创建的时候,进行动态生成的函数。通过bind进行。之所以这么做,是因为函数地址在静态的时候还不知道,只有类2的对象生成之后,才能知道具体需要调用哪个函数。这个就是回调函数。比如framework会在开始初始化很多回调函数。就是需要动态绑定的时候进行。
[C/C++]std::bind简介
最新推荐文章于 2024-05-09 23:31:00 发布