c++回调实现
回调是A将一个函数指针传给B,然后调用B,B在执行自身函数后,再在合适的时候执行A的这个函数指针,这样就能避免A和B的相互包含和链接,在大型项目中回调是一种打破循环依赖的常用技术。
typedef void(CALLBACK* MyCallBack)(const char *);
typedef void(*MyFuncB)(MyCallBack, const char *); //回调函数
void CALLBACK FuncC(const char* pszStr)
{
std::cout << "FunC is Running" << std::endl;
if (!pszStr)
{
return;
}
std::cout << pszStr << std::endl;
} //设置回调,并且执行FuncB
void FuncA(MyFuncB pFunB, MyCallBack pCallBAck, const char * pszStr)
{
std::cout << "FunA is Running" << std::endl;
if (pCallBAck && pFunB)
{
pFunB(pCallBAck, pszStr);
}
} void FunB(MyCallBack pCallBAck, const char * pszStr)
{
std::cout << "FunB is Running" << std::endl;
if (pCallBAck)
{
pCallBAck(pszStr);
}
} void FuncD(void)
{
std::cout << "FunD is Running" << std::endl;
} class CTestA
{
public:
void SetCallBack(MyCallBack pCallBack,const char* pszStr)
{
std::cout << "SetCallBack" << std::endl;
if (pCallBack && pszStr)
{
m_pCallBack = pCallBack;
m_pszStr = (char*)pszStr;
}
DoCallBack();
} void DoCallBack()
{
std::cout << "DoCallBack Running" << std::endl;
if (m_pCallBack)
{
m_pCallBack(m_pszStr);
}
} private:
MyCallBack m_pCallBack;
char* m_pszStr;
}; class CTestB
{
public:
void static CALLBACK FuncCallBack(const char* pszStr)//非 static比较麻烦
{
if (pszStr)
{
std::cout << pszStr << std::endl;
} }
}; int _tmain(int argc, _TCHAR* argv[])
{
FuncA(FunB, FuncC,"hello");
FuncD(); CTestA a;
a.SetCallBack(CTestB::FuncCallBack, "hello"); return ;
}
boost::bind也能实现类似功能
c++回调实现的更多相关文章
- JAVA回调机制(CallBack)详解
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- 小兔JS教程(三)-- 彻底攻略JS回调函数
这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...
- iOS 键盘添加完成按钮,delegate和block回调
这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...
- JAVA回调机制解析
一.回调机制概述 回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破! 回调机制是什么?其实回 ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- Java回调方法详解
回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...
- Android开发之自定义组件和接口回调
说到自定义控件不得不提的就是接口回调,在Android开发中接口回调用的还是蛮多的.在这篇博客开始的时候呢,我想聊一下iOS的自定义控件.在iOS中自定义控件的思路是继承自UIView, 在UIVie ...
- jQuery2.x源码解析(回调篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 通过艾伦的博客,我们能看出,jQuery的pro ...
- 给jquery-validation插件添加控件的验证回调方法
jquery-validation.js在前端验证中使用起来非常方便,提供的功能基本上能满足大部分验证需求,例如:1.内置了很多常用的验证方法:2.可以自定义错误显示信息:3.可以自定义错误显示位置: ...
随机推荐
- JS之arguments属性解读函数传参?
Arguments 该对象代表正在执行的函数 和 调用他的函数的参数. arguments属性:为当前执行中的 Function 对象返回 arguments 对象 和 参数. [function.] ...
- LNMP笔记:域名重定向、读写权限、显示WP主题、北京时间
边写边记,以后还会用到的. 将 xxx.com 重定向到 www.xxx.com 1.打开 /usr/local/nginx/conf/vhost/你网站的域名.com.conf 2.查看原有的 se ...
- UVA 1600 Patrol Robot
带状态的bfs 用一个数(ks)来表示状态-当前连续穿越的障碍数: step表示当前走过的步数: visit数组也加一个状态: #include <iostream> #include & ...
- SQL通过xml插入批量数据
存储过程: CREATE PROCEDURE [dbo].[UP_PurchasexxxCard] @OrderInfo XMLASBEGIN SET NOCOUNT ON; DECLARE @Dat ...
- 游览器保存密码和自动填充密码的困惑 (browser save password and auto fill password )
原文 refer : http://www.cnblogs.com/happyfreelife/p/4240100.html 当一个带有username and password 的表单被提交, 游览 ...
- Qt编程之QString 处理换行
由于之间写过的一篇文章,Unix,windows,Mac里面的换行符不一样,导致处理也不一样,我现在要用QString以行分割(读取的文本文件的里面有换行符).所以要通吃这三种换行符 http://w ...
- bootstrap栅格布局,第一次成功
代码: <div class="helper" style="background-color: #F7F7F9;height: 200px;padding-top ...
- hdu3534,个人认为很经典的树形dp
题目大意为,求一个树的直径(最长路),以及直径的数量 朴素的dp只能找出某点开始的最长路径,但这个最长路径却不一定是树的直径,本弱先开始就想简单了,一直wa 直到我看了某位大牛的题解... 按照那位大 ...
- POJ-1488(字符串应用)
Description TEX is a typesetting language developed by Donald Knuth. It takes source text together w ...
- Scala学习1
Scala是一种静态语言.面向对象的函数式编程语言.它的程序代码以.scala结尾,编译时会编译成.class字节码在jvm上运行. 类和方法默认是public的,不必显式声明public. retu ...