Further work base on RTTI:
1. CRuntimeClass
CObject* CreateObject() ;
static CRuntimeClass* PASCAL Load();
2. #define DECLARE_DYNCREATE(class_name) /
DECLARE_DYNAMIC(class_name) /
static CObject* PASCAL CreateObject();
#define IMPLEMENT_DYNACREATE(class_name, base_class_name) /
CObject* PASACAL class_name:: CreateObject() /
{return new class_name;} /
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, /
class_name::CreateObject)
3. CObject* CRuntimeClass::CreateObject()
{
if (m_pfnCreateObject == null)
return null;
return (*m_pfnCreateObject)();
}
4. CRuntimeClass* PASCAL CRuntimeClass::Load()
{
char szClassName[64];
cin << szClassName;
CRuntimeClass* pClass;
for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass )
if (strcmp(szClassName, pClass->m_lpszClassName) == 0)
return pClass;
return NULL;
}
. Apply
CRuntimeClass* pClassRef;
CObject* pOb;
while(1)
{
if ( (pClassRef = CRuntimeClass::Load() ) == NULL)
break;
pOb = pClassRef->CreateObject();
if (pOb != null)
pOb->DoSomething();
}
1. CRuntimeClass
CObject* CreateObject() ;
static CRuntimeClass* PASCAL Load();
2. #define DECLARE_DYNCREATE(class_name) /
DECLARE_DYNAMIC(class_name) /
static CObject* PASCAL CreateObject();
#define IMPLEMENT_DYNACREATE(class_name, base_class_name) /
CObject* PASACAL class_name:: CreateObject() /
{return new class_name;} /
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, /
class_name::CreateObject)
3. CObject* CRuntimeClass::CreateObject()
{
if (m_pfnCreateObject == null)
return null;
return (*m_pfnCreateObject)();
}
4. CRuntimeClass* PASCAL CRuntimeClass::Load()
{
char szClassName[64];
cin << szClassName;
CRuntimeClass* pClass;
for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass )
if (strcmp(szClassName, pClass->m_lpszClassName) == 0)
return pClass;
return NULL;
}
. Apply
CRuntimeClass* pClassRef;
CObject* pOb;
while(1)
{
if ( (pClassRef = CRuntimeClass::Load() ) == NULL)
break;
pOb = pClassRef->CreateObject();
if (pOb != null)
pOb->DoSomething();
}
本文探讨了RTTI在MFC中的实现机制,重点介绍了CRuntimeClass类及其相关成员函数,如CreateObject()和Load()。通过这些函数,可以实现运行时类型信息管理和对象的动态创建。
3169

被折叠的 条评论
为什么被折叠?



