bind 类实例对象
#include <iostream>
#include <string>
class A {
public:
int a = 1;
void f(int a1, int b1) {
std::cout << "a1" << a1 << ", b1" << b1 << std::endl;
}
};
using CB = std::function<void(int, int)>;
void g(CB cb) {
cb(1,2);
}
int main() {
A aa;
auto cb = std::bind(&A::f, aa, std::placeholders::_1, std::placeholders::_2);
g(cb);
return 0;
}
至于为什么可以这样做,因为成员函数,不属于类的实例,而属于类,A::f实际上是转化为
void f(A* this, int a1, int b1) {
std::cout << "a1" << this->a1 << ", b1" << this->b1 << std::endl;
}
所以问题在于函数需要3个参数,需要把this传递进去,于是bind来了。