c++回调函数的demo
时间: 2023-10-02 11:13:31 浏览: 43
以下是一个简单的 C++ 回调函数的示例:
```cpp
#include <iostream>
using namespace std;
// 回调函数类型
typedef void (*Callback)(int);
// 回调函数
void callbackFunc(int num) {
cout << "回调函数被调用,传入的参数是:" << num << endl;
}
// 调用回调函数的函数
void callCallback(Callback cb, int num) {
cb(num);
}
int main() {
// 将回调函数作为参数传入调用回调函数的函数中
callCallback(&callbackFunc, 123);
return 0;
}
```
注释说明:
1. 首先定义了一个回调函数类型 `Callback`,它是返回值为 void,参数为 int 的函数指针类型。
2. 然后定义了一个回调函数 `callbackFunc`,它在被调用时会输出传入的参数。
3. 接着定义了一个调用回调函数的函数 `callCallback`,它接受一个回调函数的指针和一个 int 类型的参数,然后调用传入的回调函数,并将参数传递给它。
4. 最后在 `main` 函数中,将回调函数 `callbackFunc` 的指针作为参数传入 `callCallback` 函数中,并传递一个 int 类型的参数 123。运行程序后会输出:回调函数被调用,传入的参数是:123。
相关问题
海康相机 回调函数
海康相机的回调函数可以根据使用情况选择同步回调或异步回调。同步回调是指在调用某个函数时,可以将一个回调函数作为参数传入,被调用的函数在执行完成后会立即调用这个回调函数,完成函数之间的通信。异步回调是指在调用某个函数时,可以将一个回调函数作为参数传入,被调用的函数在执行完成之前不会立即调用这个回调函数,而是在稍后的某个时刻再调用该函数,实现函数之间的异步通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [海康相机回调函数](https://blog.csdn.net/weixin_39899255/article/details/112806249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C语言回调函数demo(帮助理解)以海康isapiExternDemo回调函数为例、回调函数的定义,C/C++同步回调与异步...](https://blog.csdn.net/Dontla/article/details/122531300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
写一个在类里面调用回调函数,回调函数不是静态函数例子
以下是一个在类中调用非静态回调函数的例子:
```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`类型的参数传递回调函数。