首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于IMPLEMENT_DYNAMIC宏的有关问题

2012-03-09 
关于IMPLEMENT_DYNAMIC宏的问题在mfc的IMPLEMENT_DYNAMIC 这个宏中,有一段代码不太明白#define IMPLEMENT_

关于IMPLEMENT_DYNAMIC宏的问题
在mfc的IMPLEMENT_DYNAMIC 这个宏中,有一段代码不太明白
#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)

#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
//返回基类运行时信息结构的指针
CRuntimeClass* PASCAL class_name::_GetBaseClass() \
{ return RUNTIME_CLASS(base_class_name); } \
//初始化本类的运行时信息,依次为类名、大小,版本,NULL,基类
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
#class_name, sizeof(class class_name), wSchema, pfnNew, \
&class_name::_GetBaseClass, NULL }; \
//返回运行时类信息,重载了CObject的GetRuntimeClass,使得CObject中声明的接口对具体的派生类有效
CRuntimeClass* class_name::GetRuntimeClass() const \
{ return RUNTIME_CLASS(class_name); } \
这段代码中,对于class##class_name这个结构体的赋值好像是在任何函数以及类之外的。
但是,我自己定义了一个结构体,作为静态变量,放到了类中,却不能在类的外部为这个结构体赋值。
请问这是问什么?谢谢


[解决办法]
因为class##class_name是一个静态变量(可以看看DECLARE_DYNAMIC实现),静态变量必须在类外进行初始化
[解决办法]

C/C++ code
typedef   struct   Info{ public:   string   name;   Info*   pBaseClass;   Info(string _name, Info* p) : name(_name), pBaseClass(p) {}}Info; #define   CLASSINFO_IMPLEMENT(classname,baseclass)   \ Info   classname::info##classname   =   Info(#classname,CLASSTYPE(baseclass));\ Info*   classname::GetClassInfo(){return   &classname::info##classname;} 

热点排行