博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2个函数宏技巧
阅读量:6365 次
发布时间:2019-06-23

本文共 1247 字,大约阅读时间需要 4 分钟。

 

1.用宏调用对象函数

#define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \    do{ \      CObserverListBase
::Iterator it(observer_list); \ ObserverType* obs; \ while((obs=it.GetNext()) != NULL) \ obs->func; \ } while(0)

调用方式

//     void NotifyBar(int x, int y) {//       FOR_EACH_OBSERVER(Observer, observer_list_, OnBar(this, x, y));//     }

2.用宏定义函数指针来转发

定义:

class TestDelegate{public:    void Test(int i)    {        i=1;    }    void Test2(int i,int j)    {        i=1;    }    void (Test22)(int i,int j)    {        //((this)->*(&TestDelegate::Test))(i);    }};#define __IMPLEMENT_COMSINK_FUNCTION(func, params, values) \    typedef void (T::*F##func)params;\    void Hook_##func(F##func pf##func) \{ \    m_pf##func = pf##func; \} \    void (func)params \{ \    ((m_pT)->*(m_pf##func))values; \} \private:\    F##func m_pf##func;template
class DelegateHandler{public: DelegateHandler(T* pT,void (T::*pFunc)(int)) :m_pT(pT),m_pFunc(pFunc) { } __IMPLEMENT_COMSINK_FUNCTION(OnEvent,(int a,int b),(a,b))private: T* m_pT; void (T::*m_pFunc)(int);};

调用

TestDelegate td;DelegateHandler
dh(&td,&TestDelegate::Test);dh.Hook_OnEvent(&TestDelegate::Test2);dh.OnEvent(4,3);

转载地址:http://giama.baihongyu.com/

你可能感兴趣的文章
monkeyrunner运行Python脚本来检查apk渠道和验证是否可以调用微信
查看>>
github获得SSH Key解决Permission denied (publickey)问题
查看>>
用java代码编写Oracle存储过程
查看>>
APACHE转发
查看>>
android-market-api
查看>>
解決 yum update錯誤:[Errno -1] Metadata file does not match checksum
查看>>
ASP.NET(C#)Excel导入Dataset的出现数据值丢失问题
查看>>
我的友情链接
查看>>
『Data Science』R语言学习笔记,获取数据
查看>>
rails中n秒页面自动跳转
查看>>
我的友情链接
查看>>
忘记root用户密码怎么办?
查看>>
esxi定时任务
查看>>
Scaffold-DbContext
查看>>
关于VMware Workstation主机列表问题求教
查看>>
配置管理小报101021:给ubuntu加监控
查看>>
qml文字滚动效果的封装,实现方式运用的qml中提供的动画效果,另一种实现方式也可以使用定时器修改控件的坐标来实现...
查看>>
标准C++实现任务队列
查看>>
jdbc url
查看>>
刷leetcode第704题-二分查找
查看>>