写一个在类里面调用回调函数,回调函数不是静态函数例子
时间: 2023-03-20 17:00:46 浏览: 131
以下是一个在类中调用非静态回调函数的例子:
```c++
#include <iostream>
#include <functional>
using namespace std;
class CallbackDemo {
public:
void setCallback(function<void(int)> cb) {
m_cb = cb;
}
void triggerCallback(int num) {
if (m_cb) {
m_cb(num);
}
}
private:
function<void(int)> m_cb;
};
class Demo {
public:
void nonStaticCallback(int num) {
cout << "Non-static callback received: " << num << endl;
}
};
int main() {
Demo demoObj;
CallbackDemo cbDemoObj;
// 绑定非静态回调函数
auto cb = bind(&Demo::nonStaticCallback, &demoObj, placeholders::_1);
// 设置回调函数
cbDemoObj.setCallback(cb);
// 触发回调函数
cbDemoObj.triggerCallback(42);
return 0;
}
```
在上面的例子中,我们有一个名为`CallbackDemo`的类,其中包含一个名为`setCallback`的函数和一个名为`triggerCallback`的函数。`setCallback`函数接受一个`function`类型的参数,该参数指定要调用的回调函数。`triggerCallback`函数接受一个整数参数,并将其传递给回调函数。
我们还有一个名为`Demo`的类,其中包含一个名为`nonStaticCallback`的非静态函数。该函数将收到来自回调的整数参数并在控制台上输出。
在`main`函数中,我们首先创建了一个名为`demoObj`的`Demo`对象。接下来,我们创建了一个名为`cb`的回调函数对象。该对象绑定了`demoObj`的`nonStaticCallback`函数并接受一个整数参数。最后,我们将回调函数对象传递给`cbDemoObj`的`setCallback`函数,并调用`triggerCallback`函数以触发回调函数的执行。
总的来说,这个例子演示了如何在类中调用非静态回调函数,并通过`std::function`类型的参数传递回调函数。
阅读全文