回调是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++回调实现的更多相关文章

  1. JAVA回调机制(CallBack)详解

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  2. 小兔JS教程(三)-- 彻底攻略JS回调函数

    这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...

  3. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  4. JAVA回调机制解析

    一.回调机制概述     回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!     回调机制是什么?其实回 ...

  5. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  6. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  7. Java回调方法详解

    回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...

  8. Android开发之自定义组件和接口回调

    说到自定义控件不得不提的就是接口回调,在Android开发中接口回调用的还是蛮多的.在这篇博客开始的时候呢,我想聊一下iOS的自定义控件.在iOS中自定义控件的思路是继承自UIView, 在UIVie ...

  9. jQuery2.x源码解析(回调篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 通过艾伦的博客,我们能看出,jQuery的pro ...

  10. 给jquery-validation插件添加控件的验证回调方法

    jquery-validation.js在前端验证中使用起来非常方便,提供的功能基本上能满足大部分验证需求,例如:1.内置了很多常用的验证方法:2.可以自定义错误显示信息:3.可以自定义错误显示位置: ...

随机推荐

  1. 转:全志A20 GPIO 总结文档

    链接: http://blog.csdn.net/chwenj/article/details/42190745 /* * author:          chwenj@gmail.com. * A ...

  2. spark1.1.0源码阅读-dagscheduler and stage

    1. rdd action ->sparkContext.runJob->dagscheduler.runJob def runJob[T, U: ClassTag]( rdd: RDD[ ...

  3. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (二)PHP(PHP-FPM)安装篇

    编译安装PHP及内置PHP-FPM nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端(浏览器). nginx一般是把请 ...

  4. Qt中 QString 和int, char等的“相互”转换,关键是QString.toLocal8Bit().data();

    Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...

  5. Oracle12c中新建用户

    运行SQLPlus,以  sysdba打开 新建用户需要 create user C##[username] identified by [password] grant dba to C##[use ...

  6. VS2013编译libcurl

    首先从这里下载libcurl的package: http://curl.haxx.se/libcurl/ 然后解压,里面有个winbuild文件夹,这里是为windows构建工程的文件夹.里面有nma ...

  7. Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

    转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...

  8. win7配置简单的FTP服务器

    1.开启一些win7默认是关闭状态的功能 步骤:控制面板 -> 程序和功能 -> 打开或关闭Windows功能,然后勾选下图中圈起来的部分: 2.添加FTP站点 步骤:桌面的计算机图标 - ...

  9. hdu 4841 圆桌问题(STL vector)

    Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人 ...

  10. Parsing XML in J2ME

    sun的原文,原文地址是http://developers.sun.com/mobility/midp/articles/parsingxml/. by Jonathan KnudsenMarch 7 ...