当前位置: 首页 > article >正文

C++ 中回调函数的实现方式-函数指针

 1.什么是回调函数?

         回调函数(Callback Function)是指通过参数将一个函数传递给另一个函数,这个函数在特定的时间点或条件满足时被调用。

2.代码实现:

#include <iostream>

void callback_Fun(int x) {
    std::cout << "Callback called with value: " << x << std::endl;
}

void perform_Action(void (*callback)(int), int value) {
    callback(value); // 调用回调函数
}

int main() {
    perform_Action(callback_Funct, 10);
    return 0;
}

3.详细解释:

(1)  回调函数定义

        首先,我们定义一个简单的回调函数 callback_Fun,它接收一个整数参数并输出到控制台。

void callback_Fun(int x) {
    std::cout << "Callback called with value: " << x << std::endl;
}

这里的 callback_Fun是一个普通的 C++ 函数。这个函数并没有直接被调用,而是等待特定的条件满足时才会被触发。

(2) 接收回调函数的函数 perform_Action

   定义了一个名为 perform_Action 的函数,它接收两个参数:

  • 一个函数指针 void (*callback)(int),用于指定一个符合 void(int) 函数签名的回调函数。
  • 一个整数参数 value,将在调用回调函数时传递给它。
void perform_Action(void (*callback)(int), int value) {
    callback(value); // 调用回调函数
}
  • 这个函数的作用是:接收一个回调函数 callback 和一个整数 value,然后在函数内部调用 callback,并将 value 传递给它。
  • void (*callback)(int) 指明 callback 是一个指向函数的指针,它所指向的函数必须符合 void(int) 的签名,即返回类型是 void,接受一个 int 参数。
(3) 在 main 函数中传递回调函数

        在 main 函数中调用 performAction,并将 callbackFunction 作为参数传递给它

int main() {
    perform_Action(callback_Fun, 10);
    return 0;
}
  • callbackFunction 作为参数被传递给 performAction。因为 callbackFunction 的签名是 void(int),和 performAction 所要求的函数指针类型一致,因此可以直接传递。
  • 数字 10 作为第二个参数,表示 value.

4.执行过程

(1) main 函数调用 perform_Actionperform_Action 被调用,传入了 callback_Fun 和 10 作为参数。

(2) performAction 函数内部调用回调函数 callback_Fun

        在 perform_Action 中,执行 callback(value);

        这里 callback 指向 callback_Fun,所以等价callback_Fun(10);

  callback_Fun 被调用,并接收到参数 10;

(3)callback_Fun 执行callback_Fun 接收到 10 后,执行 std::cout << "Callback called with value: " << x << std::endl;,输出 Callback called with value: 10;

(4) perform_Action 结束执行:回调函数调用结束后,perform_Action 完成其所有逻辑,返回到 main

5.总结

这个实现方式的关键点在于:

  • 通过将函数指针 callbackFunction 传递给 performAction,实现了函数调用的延迟。
  • performAction 在合适时机(本例中是立即)调用回调函数,达到分离逻辑的效果,让代码更加灵活和可复用。

这种回调机制非常适合异步编程和事件处理等场景,在事件触发时可以调用预定义的函数。


http://www.kler.cn/a/372624.html

相关文章:

  • 传奇996_3——使用补丁添加怪物
  • JS实现图片放大镜效果
  • CPU算法分析LiteAIServer视频智能分析平台噪声检测功能在视频监控中的应用与优势
  • 笔记本脱机状态
  • 深入理解gPTP时间同步过程
  • 从可逆计算看低代码
  • ICT网络赛道安全考点知识总结1
  • 笔记整理—linux驱动开发部分(2)模块信息与编译
  • 记录一次查询优化
  • 关于Mac打包ipa的配置小结
  • Hyperledger Fabric有那些核心技术,和其他区块链对比Hyperledger Fabric有那些优势
  • Spring Boot 实现文件分片上传和下载
  • 运维端口号详解(Detailed Explanation of Operation and Maintenance Port Numbers)
  • 高效MySQL缓存策略
  • C++(运算符重载)
  • iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?
  • 【Searxng】Searxng docker 安装
  • 《IMM交互式多模型滤波MATLAB实践》专栏目录,持续更新……
  • 基于Django+python的车牌识别系统设计与实现(带文档)
  • CentOS 7 下升级 OpenSSL
  • w外链如何跳转微信小程序
  • 快速上手 Rust——环境配置与项目初始化
  • 【C++刷题】力扣-#594-最长和谐子序列
  • vue添加省市区
  • 【Gorm】自定义数据类型
  • MacOS的powermetrics命令查看macbook笔记本的耗能情况,附带查看ANE的工作情况