c++ 带参数的宏定义 实现反射机制
来源:互联网 发布:如何传软件 编辑:程序博客网 时间:2024/04/28 19:43
lua 这种脚本语言用久了,总觉得反射机制就应该理所当然的嵌入在语言特性里。
比如希望根据自己传的类名变量,动态去 new 一些实例。在 lua ,js 里做起来就非常简单,然而在 c++里面做起来,就需要稍微费些周折。
好在 c++ 宏定义 支持传入参数, 仿佛就是专门给反射机制设计的。
写的时候参考 cocos2dx CREATE_FUNC 这个宏
#define CREATE_FUNC(__TYPE__) \static __TYPE__* create() \{ \ __TYPE__ *pRet = new(std::nothrow) __TYPE__(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ return pRet; \ } \ else \ { \ delete pRet; \ pRet = NULL; \ return NULL; \ } \}
我自己的需求是 ,把一个字符串事件名,对应到一个自定义的 command 类名上。
如果手写,需要写很多类似这样长长的大同小异的代码:
EventListenerCustom* listener = nullptr;listener = EventListenerCustom::create(GG_EVENT_TEST1, [=](EventCustom* event){TestCommand command;(&command)->execute(event);});_dispatcher->addEventListenerWithFixedPriority(listener, 1);listener = EventListenerCustom::create(GG_EVENT_ENTER_GAME, [=](EventCustom* event){EnterGameCommand command;(&command)->execute(event);});_dispatcher->addEventListenerWithFixedPriority(listener, 1);
定义一个这样的宏,再写起来就方便了:
#define MAP_EVENT_COMMAND(__EVENTNAME__,__COMMANDNAME__,__DISPATCHER__) \{\EventListenerCustom* listener = nullptr; \listener = EventListenerCustom::create(__EVENTNAME__, [=](EventCustom* event){ \__COMMANDNAME__ command;\(&command)->execute(event); \}); \__DISPATCHER__->addEventListenerWithFixedPriority(listener, 1); \}
用的时候写法要简洁得多 :
MAP_EVENT_COMMAND(GG_EVENT_TEST1, TestCommand, _dispatcher)MAP_EVENT_COMMAND(GG_EVENT_ENTER_GAME, EnterGameCommand, _dispatcher)
0 0
- c++ 带参数的宏定义 实现反射机制
- 【狂人c】-笔记之定义带参数的宏,实现两个数值互相交换的功能
- java反射机制中反射带参数的方法
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- C语言带参数宏定义
- C语言带参数宏定义
- 83 C语言带参数宏定义
- C语言基础:C语言宏定义(1) - 不带参数的宏定义
- C语言基础:C语言宏定义(2) - 带参数的宏定义
- 通过定义带参数的宏实现两个参数值的互换
- 带格式化参数的strcat宏定义
- 如何定义一个带参数的宏
- 带参数的宏定义 #define
- c++之大数 实现加减法
- C语言函数参数压栈顺序为何是从右到左?
- poj 1061-青蛙的约会-拓展gcd
- 反向并查集-国王的烦恼
- 【1.0】-51单片机驱动安装与keil软件的使用
- c++ 带参数的宏定义 实现反射机制
- 百度地图的简单用法
- java四大域总结
- HDOJ 4284 Travel (DFS + Floyd )
- 316. Remove Duplicate Letters
- Leetcode 414. Third Maximum Number
- Spring学习笔记
- 零基础手绘
- 一篇经典的求职经历博客,值得深入研究和学习