概述
今天看到一种宏定义#define结合#include的用法很强大,把心得记录下来分享。
头文件 sample.h
#ifdef DECLARE_SAMPLE_EVENT
DECLARE_SAMPLE_EVENT(EVENT1, CEvent1, "事件1")
DECLARE_SAMPLE_EVENT(EVENT2, CEvent2, "事件2")
DECLARE_SAMPLE_EVENT(EVENT3, CEvent3, "事件3")
#endif
然后在头文件 event.h 中,我想对event定义一个枚举和为每个状态定义一个类
// 对事件类型枚举定义
enum E_EVENT
{
#define DECLARE_SAMPLE_EVENT(event, classname, note) event,
#include "sample.h"
#undef DECLARE_SAMPLE_EVENT
EVENT_MAX
};
这里很巧妙的把 DECLARE_SAMPLE_EVENT(event, classname, note)用宏定义为了event,
也就是 DECLARE_SAMPLE_EVENT(EVENT1, classname, "事件1") 变成了 EVENT1
#include "sample.h",相当于把sample中里的代码引用了进来。
于是宏定义还原后,代码内容就是
enum E_EVENT
{
EVENT1,
EVENT2,
EVENT3,
EVENT_MAX
};
定义枚举完成后,用 #undef 撤销宏定义 DECLARE_SAMPLE_EVENT,因为别的地方还会用到这个宏定义。
// 对事件处理定义相应的类
#define DECLARE_SAMPLE_EVENT(event, classname, note)
class classname
{
public:
classname()
{
name = #event;
note = #note;
}
~classname()
{
}
void doEvent()
{
}
private:
const char* name;
const char* note;
};
#include "sample.h"
#undef DECLARE_SAMPLE_EVENT
和之前的原理相同,用#include "sample.h"引入sample.h中的代码
并且经过宏定义,相当于有了如下3个类
CEvent1、CEvent2、CEvent3
并且在这3个类里定义了名字(name)、释义(note)和一个doEvent操作。
这样的用法好处在于添加新的事件类型和对应事件处理类时,需要改动的地方非常少,减少繁杂的改动也就增加了代码的质量。
最后
以上就是矮小摩托为你收集整理的强大的 #define XXX / #include XXX / #undef 用法的全部内容,希望文章能够帮你解决强大的 #define XXX / #include XXX / #undef 用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复