Sink的本质是利用C++的封装、继承、多态的面向对象来实现,从实现角度来说,更优于函数指针回调;

 1 // cbBysink.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5 #include "cbBysink.h"
6
7 /************************************************************************/
8 /* 上层回调函数 */
9 /************************************************************************/
10
11 class CMyWork : public baseCallBack
12 {
13 public:
14 CMyWork()
15 {
16 // 注册回调
17 CWork::registercallback(this);
18 }
19 // 回调注册实现
20 void CallbackFunction(int a, int b)
21 {
22 cout << "a = " << a << ",b = " << b << "\n" << endl;
23 return;
24 }
25 // 触发回调
26 void makefunction(int a, int b)
27 {
28 CWork::makecallback(a, b);
29 return;
30 }
31 protected:
32 private:
33 };
34
35 int main(int argc, char* argv[])
36 {
37 CMyWork c_mywork;
38
39 // 触发的时候不需要进行动态注册
40 c_mywork.makefunction(5, 6);
41
42 return 0;
43 }
 1 #include <WINDOWS.H>
2 #include <IOSTREAM>
3 using namespace std;
4 /************************************************************************/
5 /* 下层回调定义 */
6 /************************************************************************/
7
8 class baseCallBack
9 {
10 public:
11 virtual void CallbackFunction(int a, int b){}; // 虚函数,提供上层实现
12 protected:
13 private:
14 };
15
16 class CWork
17 {
18 public:
19 static void registercallback(baseCallBack *pbCallback);
20 static void makecallback(int a, int b);
21 protected:
22 private:
23 static baseCallBack *m_pbCallback;
24 };
25
26 baseCallBack *CWork::m_pbCallback = NULL;
27
28 // 提供注册函数
29 void CWork::registercallback(baseCallBack *pbCallback)
30 {
31 if (pbCallback != NULL)
32 {
33 m_pbCallback = pbCallback;
34 }
35 }
36
37 // 提供触发接口
38 void CWork::makecallback(int a, int b)
39 {
40 m_pbCallback->CallbackFunction(a, b);
41 }

C++回调:利用Sink的更多相关文章

  1. C++面试基础之回调

    回调函数技术广泛运用在动态库开发(或者类库)中,是使软件模块化的重要手段.回调函数可以看作是一种通知和实现机制,用于控制反转,即模块A调用模块B时,模块B完成一定任务后反过头来调用模块A.在被调用方代 ...

  2. Promise 原理探究及其简单实现

    可移步 http://donglegend.com/2016/09/11/promise%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/ 观看 Promise是个什么玩意,大 ...

  3. JS中的事件冒泡(Bubble)和事件捕获(capture)以及如何阻止事件的冒泡

    对“捕获”和“冒泡”这两个概念,通常我们对冒泡了解和使用的会更多一些,因为在我们使用的所有浏览器中,都支持事件冒泡 ,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefo ...

  4. 庖丁解牛-----Live555源码彻底解密(RTP解包)

    Live555 客户端解包 以testRTSPClient.cpp为例讲解: Medium<-MediaSource<-FramedSource<-RTPSource<-Mul ...

  5. 20165312 2017-2018-2 《JAVA程序设计》第4周学习总结

    一.课本五六章知识点总结 1.第五章 继承是一种由已有的类创建新类的机制 子类继承父类的成员变量和方法 子类继承的方法只能操作子类继承和隐藏的成员变量 子类重写或新增的方法只能操作子类继承和新声明的成 ...

  6. Hybrid App 原理解析

    目录 一.现有混合方案 二.Hybrid技术原理 三.Native 通知 H5 (Native 调用 JS) 3.1 Android 调 H5 3.2 iOS 调 H5 四.H5 通知 Native( ...

  7. gitlab jenkins 自动构建

    工作中有这样一种需求: 每次提交代码之后,都自动执行 单元测试脚本,进行单元测试 jenkins监听项目的某个分支,设置运行脚本,设置一个url作为回调 利用gitlab的钩子,在每次有提交之后,触发 ...

  8. 【Orleans开胃菜系列1】不要被表象迷惑

    [Orleans开胃菜系列1]不要被表象迷惑 /** * prism.js Github theme based on GitHub's theme. * @author Sam Clarke */ ...

  9. Linux ALSA声卡驱动之八:ASoC架构中的Platform

    1.  Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...

随机推荐

  1. 在线安装TIDB集群

     在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...

  2. leetcode139

    class Solution { public: bool wordBreak(string s, vector<string> wordDict) { vector<, false ...

  3. leetcode279

    动态规划 public class Solution { public int NumSquares(int n) { var list = new List<int>(); list.A ...

  4. cmd创建文件命令

    一.建立空文件的几种方法 1.cd.>a.txt cd.表示改变当前目录为当前目录,即等于没改变:而且此命令不会有输出. >表示把命令输出写入到文件.后面跟着a.txt,就表示写入到a.t ...

  5. 解决no module named ipykernel_launcher

    解决no module named ipykernel_launcher 最近开hydrogen的时候,提示no module named ipykernel_launcher. 记得以前解决过这个问 ...

  6. ELK收集Nginx|Tomcat日志

    1.Nginx 日志收集,先安装Nginx cd /usr/local/logstash/config/etc/,创建如下配置文件,代码如下 Nginx.conf input { file { typ ...

  7. HALCON示例:BOTTLE.HDEV 光学字符识别(分割OCR)

    * * bottle.hdev: Segment and read numbers on a beer bottle 分割读取啤酒瓶上的数字* * Step 0: Preparations* Spec ...

  8. Tomcat-servlet基础

    1.1 概念 运行在服务器上的小程序   定义了浏览器访问到(tomact)的规则 1.2 步骤 1.3 执行原理 1  当服务器 接收到客户端浏览器的请求后  会解析url地址  获得url路径   ...

  9. cdnbest日志分析显示404的原因

    日志分析报404原因 报这个提示一般是日志没有开启或还没有日志 检查下面几点: 开启和关闭站点日志在节点3311中显示如下图nolog是关闭  日志翻转目前默认是1个小时以后会默认改成20分钟,翻转时 ...

  10. DRF中的序列化器

    DRF中的序列化器详细应用   视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...