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. C++获取当前执行程序文件所在的全路径

  2. Java中通过Class的反射来获取方法

    本文转自:http://z3sm2012.iteye.com/blog/1933227 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类 ...

  3. Oracle,cast函数

    cast(要转换的值 AS 转换的类型): 问题:'            ' as FSubBillNo 若用此法 oracle 默认字段类型为char型 且字段长度度为输入空格的长度,会导致字符串 ...

  4. 【FZSZ2017暑假提高组Day1】确定小组

    [问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...

  5. Hibernate 再接触 性能优化

    Sessionclear 否则session缓存里越来越多 Java有内存泄露吗? 在语法中没有(垃圾自动回收) 但是在实际中会有 比如读文件没有关什么的 1+N问题 解决方法:把fetch设置为la ...

  6. CSS表单3 光标样式 (每个位置鼠标放上去的样式不同)

    <!DOCTYPE html> <html>     <head>         <title>单选按钮对齐</title>        ...

  7. C# WinForm窗体及其控件的自适应

    3步骤: 1.在需要自适应的Form中实例化全局变量   AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...

  8. 简单实用的分页类-python

    django自带的分页虽然挺好,但是就想自己弄个通用的 自己写了个分页的类,用的是python,   其他语言改下语法就能用了. #定义好类.class pagemanage: def __init_ ...

  9. Mysql连接数太多ERROR 1040 (HY000): Too many connections

    数据库连接报错:ERROR 1040 (HY000): Too many connections   1.查看连接数 /usr/local/mysql/bin/mysqladmin -h host - ...

  10. xhprof 安装详解

    准备工作1.xhprof不支持php7,需要php7以下版本2.php扩展模块xhprof下载地址: http://pecl.php.net/get/xhprof-0.9.4.tgz xhprof安装 ...