回调是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. 关于c语言不定参数的研究

    一. 学习过程 编写程序如下: 编译连接并用debug加载,观察main函数的内容: Showchar函数的内容: 观察发现,main函数要传递两个参数‘a’和2,在汇编代码中是先将2赋给ax,再将a ...

  2. web api 2 学习笔记 (Odata ODataQueryOptions 使用)

    [ODataRoutePrefix("products")] public class ProductController : BaseController { [ODataRou ...

  3. Cracking the coding interview--Q1.7

    原文 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are s ...

  4. C++实现发送HTTP请求

    #include <stdio.h>#include <windows.h>#include <wininet.h> #define MAXSIZE 1024#pr ...

  5. 3个QT新闻网,2个发烧友网站

    http://planet.qt.io/ http://blog.basyskom.com/2015/introducing-qtopcua/ http://www.qtworldsummit.com ...

  6. 黑马程序员_Java其他对象(System,Runtime,Date,Calendar,Marh-Random)

    System System类包含一些有用的类字段和方法(都是静态的).它不能被实例化. 在System类提供的设施中,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问:加载文件和库的 ...

  7. LeetCode-Word LadderII

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  8. Raid1源代码分析--同步流程

    同步的大流程是先读,后写.所以是分两个阶段,sync_request完成第一个阶段,sync_request_write完成第二个阶段.第一个阶段由MD发起(md_do_sync),第二个阶段由守护进 ...

  9. velocity自定义动画

         话说好久没有写博客了,零星的整理了一些东西,没有形成系统,所以也没有在这里记录.        废话不多说了,进入今天的正题.不知道大家是否记得之前写过的一篇文章<制作炫酷的专题页面& ...

  10. SpringMVC拦截器(实现登录验证拦截器)

    本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 <%@ ...