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 ...
随机推荐
- Android 开发 框架系列 OkHttp使用详解
简介 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) . ...
- Thrift 的五种工作模式
一.thrift 共有5中工作模式,分成阻塞和非阻塞: 阻塞:TSimpleServer.TThreadPoolServer 非阻塞:TNonblockingServer.THsHaServer.TT ...
- 直接添加viewController中的view时的注意事项
直接添加viewController中的view时需要注意一个问题,比如: MyTestViewController *vc = [MyTestViewController new]; [self.v ...
- xml实现登录表单验证
定义: XML(eXtended Markup Language,可扩展标记语言)提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML可以方便地实现数据交换.系统配置.内容管理等常见功能. ...
- 尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理
EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置 @AutoConfigureOrder(Ordered.HIGHEST_PREC ...
- Swagger使用
Swagger 1.集成springboot 第一步:pom <dependency> <groupId>io.springfox</groupId> <ar ...
- 教女朋友写第一个php
1 首先 下载xampp 软件.按默认安装好之后 在电脑的右下角的箭头里能发现一个橘色的小图标 双击它 启动阿帕奇和mysql 会变绿 2 打开 C:\xampp\apache 文件夹 找到httpd ...
- 解决xcode10打包报错:That command depends on command in Target ‘xxx’:scrpit phase"[CP] Copy Pods Resources"
问题:使用xcode10打包报错,提示 error:Multiple commands produce ‘xxxx/xxx.app’ 1)Target ‘xx’ has create director ...
- 动态加载、移除js、css
本文简单介绍动态加载.移除.替换js/css文件 .有时候我们在写前端的时候,会有出现需要动态加载一些东如css js 这样能减轻用户加载负担,从而提高响应效率.下面贴出代码.//JS写法 <s ...
- 100-days: seventeen
Title: How 'Bohemian Rhapsody(波西米亚狂想曲)' ended up in 'Wayne's World(反斗智多星)' and became a phenomenon(现 ...