我花了几天时间学习C ++,但我刚刚发现了一些我从未在书中看到的东西,也没有在谷歌上做过一些研究。
据我所知,宏是一个以#define
开头的语句或“变量”名称,允许稍后指定某些值或函数,并自动插入所需的值。
但是,我遇到了一个在clas中声明的函数,而不是#define
之前的函数,它被称为“宏”。该函数来自MFC,称为DECLARE_MESSAGE_MAP
。
http://msdn.microsoft.com/en-us/library/08ea0k43.aspx
有人可以解释这种类型的宏是什么;它叫什么(所以我可以进一步研究它)它是什么意思?
答案 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
解决方案是将其保留在受保护的存储类中。即, 在它上面声明一个受保护的存储类并声明 需要保护的功能和变量,位于其下方。让 公共函数和变量位于受保护部分之上 适当声明存储类。