C++回调:利用Sink
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的更多相关文章
- C++面试基础之回调
回调函数技术广泛运用在动态库开发(或者类库)中,是使软件模块化的重要手段.回调函数可以看作是一种通知和实现机制,用于控制反转,即模块A调用模块B时,模块B完成一定任务后反过头来调用模块A.在被调用方代 ...
- Promise 原理探究及其简单实现
可移步 http://donglegend.com/2016/09/11/promise%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/ 观看 Promise是个什么玩意,大 ...
- JS中的事件冒泡(Bubble)和事件捕获(capture)以及如何阻止事件的冒泡
对“捕获”和“冒泡”这两个概念,通常我们对冒泡了解和使用的会更多一些,因为在我们使用的所有浏览器中,都支持事件冒泡 ,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefo ...
- 庖丁解牛-----Live555源码彻底解密(RTP解包)
Live555 客户端解包 以testRTSPClient.cpp为例讲解: Medium<-MediaSource<-FramedSource<-RTPSource<-Mul ...
- 20165312 2017-2018-2 《JAVA程序设计》第4周学习总结
一.课本五六章知识点总结 1.第五章 继承是一种由已有的类创建新类的机制 子类继承父类的成员变量和方法 子类继承的方法只能操作子类继承和隐藏的成员变量 子类重写或新增的方法只能操作子类继承和新声明的成 ...
- Hybrid App 原理解析
目录 一.现有混合方案 二.Hybrid技术原理 三.Native 通知 H5 (Native 调用 JS) 3.1 Android 调 H5 3.2 iOS 调 H5 四.H5 通知 Native( ...
- gitlab jenkins 自动构建
工作中有这样一种需求: 每次提交代码之后,都自动执行 单元测试脚本,进行单元测试 jenkins监听项目的某个分支,设置运行脚本,设置一个url作为回调 利用gitlab的钩子,在每次有提交之后,触发 ...
- 【Orleans开胃菜系列1】不要被表象迷惑
[Orleans开胃菜系列1]不要被表象迷惑 /** * prism.js Github theme based on GitHub's theme. * @author Sam Clarke */ ...
- Linux ALSA声卡驱动之八:ASoC架构中的Platform
1. Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...
随机推荐
- JS HTML倒计时 进入页面
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- leetcode104
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...
- nexus的安装和简介
下载nexus Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等. 下载Nexus, 下载地址:http://www.s ...
- cmd创建文件命令
一.建立空文件的几种方法 1.cd.>a.txt cd.表示改变当前目录为当前目录,即等于没改变:而且此命令不会有输出. >表示把命令输出写入到文件.后面跟着a.txt,就表示写入到a.t ...
- Android关于API level、buildToolVersion、CompileSdkVersion
API level: API level是一个整数,它指的是我们使用的框架(Framework)的版本,也就是我们使用的sdk中的各个平台下的android.jar. 但是这个API level又和A ...
- Sqlite安装教程
Sqlite下载页面:http://www.sqlite.org/download.html Windows安装 需要下载 sqlite-tools-win32-*.zip 和 sqlite-dll- ...
- 微信小程序---人脸识别(wx.startFacialRecognitionVerify)
1.由于人脸核验功能涉及到用户的敏感.隐私信息,因此调用此接口的业务方,需要满足一定的条件,申请小程序的人脸识别api.开通小程序后台的接口权限入口后,开发者可以登录mp.weixin.qq.com小 ...
- 模型介绍之FastText
模型介绍一: 1. FastText原理及实践 前言----来源&特点 fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在学术上并没有太大创新.但是它的优点也 ...
- Oracle修改表结构字段名和字段长度
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...
- Git的操作方法
创建仓库 git clone 加上你的远程仓库克隆下来 git add . 把你文件里面的改动更改添加到git里面 git status 查看状态,更新了那些内容 git commit -m" ...