我是靠谱客的博主 矮小摩托,最近开发中收集的这篇文章主要介绍强大的 #define XXX / #include XXX / #undef 用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天看到一种宏定义#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 用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部