IMPLEMENT_RUNTIMECLASS
#defineIMPLEMENT_DYNCREATE(class_name,base_class_name)\CObject*PASCALclass_name::Crea...
#define IMPLEMENT_DYNCREATE(class_name, base_class_name) \
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; } \
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \
class_name::CreateObject)
比如_IMPLEMENT_RUNTIMECLASS中的每个参数的意义是为了实现什么功能? 展开
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; } \
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \
class_name::CreateObject)
比如_IMPLEMENT_RUNTIMECLASS中的每个参数的意义是为了实现什么功能? 展开
展开全部
这些参数都是宏参数,他们都是为了去定义一个类型为CRuntimeClass的叫class##class_name的静态结构体实例,而这个静态的结构体实例是在DELCARE_DYNACREATE中被声明的。而该结构体类型是这样的:
struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_ClassSize;
UINT mWSchema;
CObject *(PASCAL *m_lpfunCreateObject)();
CRuntimeClass *m_pBaseClass;
CObject *CreateObject();
static CRuntimeClass * PASCAL Load();
static CRuntimeClass *pFirstClass();
CRuntimeClass *m_pNextClass();
};
而在_IMPLEMENT_RUNTIMECLASS中class_name中其被用作char _lpsz##class_name[]=#class_name;
而_lpsz##class_name用于对CRuntimeClass中的m_lpszClassName进行赋值。
用途:一般用于动态创建中字符串的比对。
base_class_name其用作RUNTIME_ClASS(base_class_name)对CRuntimeClass中的m_pBaseClass进行赋值。
用途:一般用于获取父类的静态CRuntimeClass变量:class##base_class_name;
OxFFFF其用于对CRuntimeClass中的m_WSChema进行赋值。
用途:用于文档版本号。在序列化中有用,在动态创建中可以不管它,就这么写就可以。
class_name::CreateObject是一个函数指针,该函数就是你自己都在问题中写了一遍,其对CRuntimeClass中的m_pfunCreateObject进行赋值。
用途:你自己也写了,用于在heap内存中创建new一个该类的对象,是最终目的。
struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_ClassSize;
UINT mWSchema;
CObject *(PASCAL *m_lpfunCreateObject)();
CRuntimeClass *m_pBaseClass;
CObject *CreateObject();
static CRuntimeClass * PASCAL Load();
static CRuntimeClass *pFirstClass();
CRuntimeClass *m_pNextClass();
};
而在_IMPLEMENT_RUNTIMECLASS中class_name中其被用作char _lpsz##class_name[]=#class_name;
而_lpsz##class_name用于对CRuntimeClass中的m_lpszClassName进行赋值。
用途:一般用于动态创建中字符串的比对。
base_class_name其用作RUNTIME_ClASS(base_class_name)对CRuntimeClass中的m_pBaseClass进行赋值。
用途:一般用于获取父类的静态CRuntimeClass变量:class##base_class_name;
OxFFFF其用于对CRuntimeClass中的m_WSChema进行赋值。
用途:用于文档版本号。在序列化中有用,在动态创建中可以不管它,就这么写就可以。
class_name::CreateObject是一个函数指针,该函数就是你自己都在问题中写了一遍,其对CRuntimeClass中的m_pfunCreateObject进行赋值。
用途:你自己也写了,用于在heap内存中创建new一个该类的对象,是最终目的。
亚果会
2024-04-11 广告
2024-04-11 广告
Goma Greens是一家专注于提供高品质有机蔬果的企业。我们致力于为消费者带来新鲜、健康、无污染的食材,以满足现代人对健康生活的追求。我们的产品均来自精心挑选的有机农场,通过严格的品质控制,确保每一份食材都达到最高标准。此外,我们还提供...
点击进入详情页
本回答由亚果会提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询