回调函数基本实现

回调函数(Callback Function)是一段可以在将来某个时间点被调用的代码。
它通常作为参数传递给另一个函数(称为高阶函数或接受函数),并在需要的时候(比如某个操作完成或事件发生时)由那个函数来调用。

基本思想:“不要返回我结果,当你有结果时,请调用这个函数,并将结果作为参数传递给它。”

回调函数的作用

  1. 异步编程:在需要等待的操作(如文件读写、网络请求等)完成时,回调函数允许程序继续执行其他任务,而不是阻塞等待。当操作完成时,回调函数被调用,处理结果。
  2. 事件监听:在图形用户界面(GUI)编程、网络编程等领域,当发生特定事件(如用户点击按钮、接收到网络消息等)时,可以注册回调函数来响应这些事件。

使用步骤

  1. 定义回调函数类型:首先,你需要定义一个函数指针类型,该类型与你的回调函数签名相匹配。或者,你可以使用std::function,它提供了更灵活的方式来存储和调用可调用对象(包括函数、lambda表达式、bind表达式等)。
  2. 实现回调函数:然后,你需要实现一个或多个符合上述类型的函数作为回调函数。
  3. 编写接受回调作为参数的函数:接下来,编写一个函数,该函数接受一个回调函数作为参数,并在适当的时候调用它。
  4. 调用包含回调的函数:最后,将你的回调函数作为参数传递给那个函数,并在回调函数被调用时查看结果。

代码示例:

使用函数指针实现回调

#include <iostream>  
  
// 步骤1: 定义回调函数类型  
typedef void (*Callback)(int);  
  
// 步骤2: 实现回调函数  
void myCallback(int value) {  
    std::cout << "Callback called with value: " << value << std::endl;  
}  
  
// 步骤3: 编写接受回调作为参数的函数  
void doSomething(Callback cb, int value) {  
    // ... 这里可以执行一些操作 ...  
      
    // 调用回调函数  
    cb(value);  
}  
  
int main() {  
    // 步骤4: 调用包含回调的函数  
    doSomething(myCallback, 10);  
      
    return 0;  
}

使用std::function实现

#include <iostream>  
#include <functional>  
  
// 步骤1: (隐式地)定义回调函数类型  
// 这里不需要显式定义,因为std::function可以接受多种可调用对象  
  
// 步骤2: 实现回调函数  
void myCallback(int value) {  
    std::cout << "Callback called with value: " << value << std::endl;  
}  
  
// 也可以直接使用lambda表达式作为回调函数  
auto lambdaCallback = [](int value) {  
    std::cout << "Lambda callback called with value: " << value << std::endl;  
};  
  
// 步骤3: 编写接受回调作为参数的函数  
void doSomething(std::function<void(int)> cb, int value) {  
    // ... 这里可以执行一些操作 ...  
      
    // 调用回调函数  
    cb(value);  
}  
  
int main() {  
    // 步骤4: 调用包含回调的函数  
    doSomething(myCallback, 20);  
    doSomething(lambdaCallback, 30);  
      
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值