MFC里运行时类型识别(RTTI)的主要代码摘录。IsKindOf函数的作用是获取一个类的类型信息。在函数中首先调用虚函数GetRuntimeClass()获取自己类中指向CRuntimeClass的结构体对象的指针,这个结构体拥有这个类的类型信息。然后调用IsDerivedFrom(pClass)函数将刚才获取的类的类型信息与传进来的类型信息进行比较。
我的问题是:
if (pClassThis == pBaseClass)
两个指向CRuntimeClass结构体对象的指针怎么能用==运算符进行比较?在CRuntimeClass结构体中并没有超载==运算符啊。哪位高手请赐教。也许我大脑短路了,想不出来为什么。
提取的主要代码如下:
CObject::IsKindOf(const CRuntimeClass* pClass) const
{
……
CRuntimeClass* pClassThis = GetRuntimeClass();
return pClassThis->IsDerivedFrom(pClass);
}
BOOL CRuntimeClass::IsDerivedFrom(const CRuntimeClass* pBaseClass) const
{
……
while (pClassThis != NULL)
{
if (pClassThis == pBaseClass)
return TRUE;
#ifdef _AFXDLL
pClassThis = (*pClassThis->m_pfnGetBaseClass)();
#else
pClassThis = pClassThis->m_pBaseClass;
#endif
}
return FALSE; // walked to the top, no match
}
[此贴子已经被作者于2007-5-11 21:22:54编辑过]