c++回调实现
来源:互联网 发布:牛魔王 知乎 编辑:程序博客网 时间:2024/06/06 14:29
回调是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;}//设置回调,并且执行FuncBvoid 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 0;}
boost::bind也能实现类似功能
0 0
- C语言实现回调
- 客户端回调实现 (C#) 示例
- 客户端回调实现 (C#) 示例
- 客户端回调实现 (C#) 示例
- 《Effective C#》:用委托实现回调
- 客户端回调实现 (C#) 示例
- c回调数据给java实现
- C/C++ 实现函数回调
- C 语言实现函数回调
- 回调函数 c实现
- .net2.0客户端回调实现 (C#) 示例
- ASP.NET 客户端回调实现 (C#) 示例
- 《Effective C#》Item 21:用委托实现回调
- 如何在C和C++中实现回调
- 《Effective C#》Item 21:用委托实现回调
- 《Effective C#》Item 21:用委托实现回调
- 如何在C和C++中实现回调
- C语言通过线程实现回调机制
- QQ欢乐斗地主心得体会 (三):高倍场攻略
- 实习篇---补牙二
- 为Android HorizontalListView添加Scrollbar
- GridView--且解决与ScrollView共用的冲突问题
- java java.util.Random类的介绍
- c++回调实现
- 我的第三行PHP代码之接受安卓端get请求,注册新用户写入数据库
- PHP---查询数据乱码
- Android中百度地图计算MapView任意位置的经纬度
- U-boot第一阶段分析
- 技术团队的情绪与效率
- 电路中的各种地(转)
- UIBezierPath和CGContext类中的方法
- Linux内核编程:从hello world 开始-(3)_run