c++ 实现回调函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c++ 实现回调函数
在 C++ 中,回调函数(callback function)是一种基于函数指
针的编程方式,可以将函数作为参数传递给其他函数,在需要的时候
调用该函数。
回调函数在很多应用场景中都能发挥重要的作用,比如
事件处理、消息通知、多线程编程等。
在 C++ 中实现回调函数有多种方法,下面列举了其中几种常见
的方法:
1. 函数指针
使用函数指针作为回调函数的方式是最简单的方法。
定义一个函
数指针类型,然后在需要的地方将回调函数的地址作为参数传递即可。
例如:
```
typedef void (*CallbackFunc)(int);
void myFunction(CallbackFunc callback) {
callback(42);
}
void myCallback(int data) {
std::cout << "Data received: " << data << std::endl;
}
myFunction(&myCallback);
```
这里定义了一个名为 CallbackFunc 的函数指针类型,它接受一
个 int 类型的参数并返回 void。
然后在 myFunction 函数中,将回
调函数的地址作为参数传递,最后在 myCallback 函数中接收回调函
数传递的参数。
2. 函数对象
使用函数对象作为回调函数的方式更加灵活。
可以定义一个包含
operator() 方法的类,并通过该类的对象来调用回调函数。
例如:```
class MyCallback {
public:
void operator()(int data) const {
std::cout << "Data received: " << data << std::endl;
}
};
void myFunction(const std::function<void(int)>& callback) {
callback(42);
}
MyCallback myCallback;
myFunction(myCallback);
```
这里定义了一个名为 MyCallback 的类,它包含了一个带有 int 参数和 void 返回类型的 operator() 方法。
然后在 myFunction 函
数中,使用 std::function 模板接受一个函数对象类型的参数,并在函数中调用该函数对象。
3. Lambda 表达式
使用 Lambda 表达式作为回调函数的方式也十分方便,特别适合定义简单的回调函数。
例如:
```
void myFunction(const std::function<void(int)>& callback) {
callback(42);
}
myFunction([](int data) {
std::cout << "Data received: " << data << std::endl;
});
```
这里直接在 myFunction 函数的参数中使用一个 Lambda 表达式,
该表达式接收 int 参数并输出到控制台。
总结:C++ 中实现回调函数有多种方法,常见的有函数指针、函数对象和 Lambda 表达式。
通过回调函数的使用,可以极大地增强代码的灵活性和可复用性。