在类定义中声明的C ++宏?

时间:2013-10-22 20:46:08

标签: c++ macros

我花了几天时间学习C ++,但我刚刚发现了一些我从未在书中看到的东西,也没有在谷歌上做过一些研究。

据我所知,宏是一个以#define开头的语句或“变量”名称,允许稍后指定某些值或函数,并自动插入所需的值。

但是,我遇到了一个在clas中声明的函数,而不是#define之前的函数,它被称为“宏”。该函数来自MFC,称为DECLARE_MESSAGE_MAPhttp://msdn.microsoft.com/en-us/library/08ea0k43.aspx

有人可以解释这种类型的宏是什么;它叫什么(所以我可以进一步研究它)它是什么意思?

2 个答案:

答案 0 :(得分:1)

DECLARE_MESSAGE_MAP只是在MFC(Afx.h?)包含中定义的#define。与任何其他#define相比没有什么特别之处。

这是一本旧书:MFC Internals但如果您想了解MFC中所有这些内容以及它们的工作原理,那么这是一本经典之作。

答案 1 :(得分:0)

您可能会发现this有趣: -

  

如果您决定清理并重新安排代码,请务必小心   关于将存在于MFC中的DECLARE_MESSAGE_MAP()宏   派生类头文件。 此宏包含“受保护”存储   班级宣言。因此,这个宏下的所有内容都将是   保护,除非之后指定任何其他存储类   那。编译期间发生的正常错误将无法访问   私有变量。但你不能轻易弄清楚出了什么问题   你只能看到上面的宏调用和公共存储类。

#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() \
private: \
    static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
    static AFX_DATA const AFX_MSGMAP messageMap; \
    static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \
    virtual const AFX_MSGMAP* GetMessageMap() const; \

#else
#define DECLARE_MESSAGE_MAP() \
private: \
    static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
    static AFX_DATA const AFX_MSGMAP messageMap; \
    virtual const AFX_MSGMAP* GetMessageMap() const; \

#endif
     

解决方案是将其保留在受保护的存储类中。即,   在它上面声明一个受保护的存储类并声明   需要保护的功能和变量,位于其下方。让   公共函数和变量位于受保护部分之上   适当声明存储类。