注册与回调

C++ 再论无处不在的回调机制---注册与回调

  回调函数的作用和用途,我就不多说了,之前也讨论过, 现在再来熟悉一下与回调函数相关的程序。 我们知道, 回调机制, 就是通过函数指针来实现的。

  说白了, 就是注册与回调。

  下面,直接上菜, 希望大家品尝:

复制代码

 1 #include <iostream>
 2 using namespace std;
 3  
 4 typedef void(*PF)();
 5 PF g_pf = NULL;
 6  
 7  
 8 /**********************************/
 9 // B模块
10  
11 // B模块向外提供的回调函数注册接口, 也就是说,提供注册服务, 想注册的,调用该接口即可
12 void registerFun(PF pf)
13 {
14     g_pf = pf;
15 }
16  
17  
18 // B模块的某函数, 在一定条件下被触发
19 void fun()
20 {
21     // 执行别的模块注册过来的回调函数
22     (*g_pf)(); // or g_pf();
23 }
24  
25 /**********************************/
26  
27  
28  
29  
30 /**********************************/
31 // A模块
32  
33 // A模块的回调函数
34 void callBack()
35 {
36     cout << "call back function" << endl;
37 }
38  
39 // A 模块的主函数
40 int main()
41 {
42     // A模块利用B模块的注册接口, 向B模块注册
43     registerFun(callBack);
44  
45     // 在一定条件下,B模块的fun函数被触发了
46     fun();
47  
48     return 0;
49 }
50  
51 /**********************************/

复制代码

下面来搞笑一下:

复制代码

 1 #include <iostream>
 2 using namespace std;
 3  
 4 typedef void(*PointerToAction)();
 5 PointerToAction g_pf = NULL;
 6  
 7  
 8 /**********************************/
 9 // 公司
10  
11 // 公司提供登记服务, pf指向员工登记的某行为,比如提前登记获许在公司喝酒
12 void registerAction(PointerToAction pf)
13 {
14     // 公司记录该员工已经登记获许的行为,比如可以在公司内喝酒
15     g_pf = pf;
16 }
17  
18  
19 // 在公司内, 发生了该事件 :员工在公司内抽烟,被抓住了
20 void drinkAlcoholInCompany()
21 {
22     // 去翻阅登记信息, 调取当时的登记资料
23     (*g_pf)();
24 }
25  
26 /**********************************/
27  
28  
29  
30  
31 /**********************************/
32 // 员工
33  
34 // 员工将要登记的行为,即登记在公司内获许喝酒
35 void callBack()
36 {
37     cout << "登记在公司内部可以喝酒, 我爱喝就喝。" << endl;
38 }
39  
40 // 员工开始活动了
41 int main()
42 {
43     // 员工第一天上班,去注册登记可以在公司内喝酒
44     registerAction(callBack);
45  
46     // 员工在公司内喝酒,被抓住了
47     drinkAlcoholInCompany();
48  
49     return 0;
50 }
51  
52 /**********************************/

复制代码

最后,我要说,我不爱喝酒。

分类: C/C++

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/238525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法-05-二分查找

二分查找&#xff08;Binary Search&#xff09;算法&#xff0c;也叫折半查找算法&#xff0c;是一种针对有序数据集合的查找算法。 1-二分查找的思想 我们生活中猜数字的游戏&#xff0c;告诉你一个数据范围&#xff0c;比如0-100&#xff0c;然后你说出一个数字&#xff0c…

【lesson8】表的约束(1)

文章目录 表的约束的介绍空属性约束&#xff08;null&#xff09;和非空属性约束测试建表插入测试 默认值约束测试建表测试 建表查看默认行为建表插入测试 表的约束的介绍 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#…

LeetCode-交换链表中节点的问题

两两交换链表中的节点 题目描述&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 思路&#xff1a; 首先将整个链…

MinGW编译Ptyhon至pyd踩坑整理

注意需要魔法 用scoop自动安装配置MinGw 需要魔法&#xff0c;不需要手动配置mingw scoop install mingw安装Cython&#xff0c;Setuptools第三方库 关闭魔法&#xff0c;使用清华源 pip install setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install cyt…

800万纯AI战士年末大集结,硬核干货与音乐美食12月28日准时开炫

回望2023年&#xff0c;大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态&#xff0c;大语言模型在突飞猛进中加速重构万物。随着理解、生成、逻辑、记忆四大能力显著提升&#xff0c;大语言模型为通用人工智能带来曙光。 AI开发者们正在用算法和代码书写一个美…

Python简单网抑云数据采集 JS逆向

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.10 Pycharm 模块使用: requests -> pip install requests execjs -> pip install execjs 爬虫实现基本思路流程: 一. 数据来源分析: 明确需求: 明确采集的网站以及数据内容 网址: https://mu…

【java】java类/方法冲突解决工具

目录下查找包含特定名称&#xff08;如&#xff1a;类名称&#xff09;的Jar包 上代码&#xff1a; 比如要查找含有类 “org/apache/avro/Schema” 的&#xff1a; # 方法一 # 此方法只能查找到内容&#xff08;比如&#xff1a;类名称&#xff09;。但是不能打印jar名称 fi…

大数据Vue项目必备|Window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

大数据Vue项目必备|Window下安装并使用nvm&#xff08;含卸载node、卸载nvm、全局安装npm&#xff09; 一、卸载旧版本 如果已经安装了node&#xff0c;那么需要先卸载node&#xff0c;如果没有安装那可以直接跳过这一步。 卸载&#xff1a;   打开控制面板 -> 打开程序和…

2个实用的快速涨粉视频号数据分析平台

很多人在做视频号的视频总不知道怎么利用视频号进行数据分析以及如何涨粉&#xff1f;今天就说两个视频号数据分析平台 可以查询各项爆款数据&#xff0c;什么账号大火、什么领域热大家都在关心什么快速了解。 1&#xff1a;视频号助手&#xff08;https://channels.weixin.q…

一文了解什么是Selenium自动化测试?

一、Selenium是什么&#xff1f; 用官网的一句话来讲&#xff1a;Selenium automates browsers. Thats it&#xff01;简单来讲&#xff0c;Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作浏览器一样。支持的浏…

手把手搭建腾讯云服务器教程(新手必看)

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com分享使用腾讯云服务器建站教程&#xff0c;…

社区团购行业分析:未来在门店拓展上还有很大的发展空间

社区团购是真实居住社区内居民团体的一种互联网线上线下购物消费行为&#xff0c;是依托真实社区的一种区域化、小众化、本地化、网络化的团购形式。简而言之&#xff0c;它是依托社区和团长社交关系实现生鲜商品流通的新零售模式。 社区团购&#xff0c;是指一定数量的消费者通…

Android 蓝牙BluetoothAdapter 相关(一)

Android 蓝牙相关 本文主要讲述android 蓝牙的简单使用. 1: 是否支持蓝牙 /*** 是否支持蓝牙** return*/ private boolean isSupportBluetooth() {BluetoothAdapter bluetoothAdapter BluetoothAdapter.getDefaultAdapter();return bluetoothAdapter ! null; }2: 开启蓝牙 …

消息队列kafka详解:Kafka架构介绍

一. 工作流程 Kafka中消息是以topic进行分类的&#xff0c;Producer生产消息&#xff0c;Consumer消费消息&#xff0c;都是面向topic的。 Topic是逻辑上的改变&#xff0c;Partition是物理上的概念&#xff0c;每个Partition对应着一个log文件&#xff0c;该log文件中存储的就…

智能优化算法应用:基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文…

C++学习笔记(十一)------has_a和use_a关系

文章目录 前言 一、has_a关系 1.1 has_a概念 1.2 has_a中构造和析构的顺序 1.3 has_a对象的内存情况 二、use_a关系&#xff08;友元关系&#xff09; 1.友元函数&#xff1a; 2.友元类 3 使用多文件编程的方式重新编辑上述代码 总结 前言 随着技术的革新&#xff0c;出现各种各…

信奥赛 1310:【例2.2】车厢重组

本题解析&#xff1a;根据上述的要求&#xff0c;转化为程序的解题方案&#xff0c;就是用到了冒泡排序。本题中求的是旋转次数&#xff0c;实际上就是冒泡排序中交换的次数。 本题考察的知识点是&#xff1a;冒泡排序的用法。 参考代码&#xff1a; 上述代码仅供参考&#xff…

Vue学习计划-Vue2--VueCLi(四)组件传值和自定义事件

1. 组件传值 组件化编码流程&#xff1a; 拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a; 一个组件在用&#xff0c…

Git 硬重置之后恢复历史提交版本

****硬重置之前一定要备份分支呀&#xff0c;谨慎使用硬重置&#xff0c;特别是很多人一起使用的分支**** 如果你在reset的时候选择了Hard选项&#xff0c;也就是硬重置 重置完且push过&#xff0c;那么被你本地和远端后面的提交记录肯定就会被抹去。 解决办法&#xff1a; …

TypeScript入门实战笔记 -- 01 如何快速搭建 TypeScript 学习开发环境?

&#x1f34d;IDE for TypeScript 在搭建 TypeScript 环境之前&#xff0c;我们需要先认识几款适合 TypeScript 的 IDE。只有这样&#xff0c;在开发时我们才能根据实际情况选择合适的 IDE 进行安装&#xff0c;从而提升工作效率。 VS Code Visual Studio Code&#xff08;VS C…
最新文章