模拟 mfc 类型识别

来源:互联网 发布:正大软件学校 编辑:程序博客网 时间:2024/05/21 14:47
#include <STDLIB.H>
#include <afx.h>


struct RuntimeClass {
public:
char* pszClassName;
RuntimeClass* pBase;
};


class CTest {
virtual IsKindOf(RuntimeClass& rt){
RuntimeClass *prt = &rtCTestInfo;
for(;prt != NULL; prt = prt->pBase){
if(prt == &rt)
return TRUE;
}
return FALSE;
}
public:
static RuntimeClass rtCTestInfo;
};
RuntimeClass CTest::rtCTestInfo = {"CTest", NULL};


class CBase {
virtual IsKindOf(RuntimeClass& rt){
RuntimeClass *prt = &rtCBaseInfo;
for(;prt != NULL; prt = prt->pBase){
if(prt == &rt)
return TRUE;
}
return FALSE;
}
public:
static RuntimeClass rtCBaseInfo;
};
RuntimeClass CBase::rtCBaseInfo = {"CBase", NULL};


class CDevice:public CBase{
public:
virtual BOOL IsKindOf(RuntimeClass& rt){
RuntimeClass *prt = &rtCDeviceInfo;
for(;prt != NULL; prt = prt->pBase){
if(prt == &rt)
return TRUE;
}
return FALSE;
}
virtual RuntimeClass GetRuntimeClass(){
return rtCDeviceInfo;
}
static RuntimeClass rtCDeviceInfo;
};
RuntimeClass CDevice::rtCDeviceInfo = {"CDevice", &rtCBaseInfo};


int main(int argc, char* argv[])
{
CDevice d;
CDevice* pd = &d;
//BOOL bRet = pd->IsKindOf(???);
BOOL bRet = pd->IsKindOf(CBase::rtCBaseInfo);
BOOL bRet2= pd->IsKindOf(CTest::rtCTestInfo);


system("pause");
return 0;
}
原创粉丝点击