• 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 /**********************************/

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

  • 相关阅读:
    ZAB 和 Paxos 算法的联系与区别?
    Spring支持的ORM?
    解释对象/关系映射集成模块?
    哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?
    我们能自己写一个容器类,然后使用 for-each 循环码?
    Struts2的Action中获取request对象的几种方式?
    Chroot 特性?
    String是最基本的数据类型吗?
    @Autowired 注解?
    比较HQL、Criteria、Native-SQL这三者做查询的区别,以及应该如何进行选择?
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/16566414.html
Copyright © 2020-2023  润新知