qt a类和b类在c类使用std::bind绑定回调函数式列
时间: 2024-08-05 21:01:15 浏览: 36
在C++中,特别是使用Qt库,当你需要在A类或B类的对象上调用某个函数作为回调时,可以使用C++11引入的`std::bind`功能。假设我们有三个类A、B和C:
```cpp
class A {
public:
void myCallback(int param) { /* do something with param in class A */ }
};
class B {
public:
void myCallback(int param) { /* do something different with param in class B */ }
};
class C {
private:
std::function<void(int)> callback; // 使用std::function保存回调
public:
// 在C类中接受回调函数
void setCallback(A* a = nullptr, B* b = nullptr) {
if (a) {
callback = std::bind(&A::myCallback, a, _1);
} else if (b) {
callback = std::bind(&B::myCallback, b, _1);
}
}
// 当你需要调用这个回调时
void invokeCallback(int param) {
callback(param); // 会根据传入C类时绑定的对象执行相应的回调
}
};
```
在这里,当`C`类实例化时,通过`setCallback`方法,可以根据传入的是`A`指针还是`B`指针,选择绑定相应的回调函数。然后在`invokeCallback`方法中,传递给它的参数会被相应地传递给绑定的函数。