c++ 带参数的宏定义实现反射机制
生活随笔
收集整理的這篇文章主要介紹了
c++ 带参数的宏定义实现反射机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
lua 這種腳本語言用久了,總覺得反射機制就應該理所當然的嵌入在語言特性里。
比如希望根據自己傳的類型名變量,動態去 new 一些實例。在 lua ,js 里做起來就非常簡單,然而在 c++里面做起來,就需要稍微費些周折。
好在 c++ 宏定義 支持傳入參數, 仿佛就是專門給反射機制設計的。
寫的時候參考 cocos2dx CREATE_FUNC 這個宏
我自己的需求是 ,把一個字符串事件名,對應到一個自定義的 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)轉載自:https://blog.csdn.net/korekara88730/article/details/68955408?utm_source=copy
總結
以上是生活随笔為你收集整理的c++ 带参数的宏定义实现反射机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务架构设计基础之领域驱动设计
- 下一篇: EOS 连接同步主网