2010.8.21 关于RUNTIME_CLASS 不懂就问,不要自欺欺人!
BOOL CtestDlgApp::InitInstance()
{
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CtestDlgDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CtestDlgView));
}
这个东西始终不懂是什么意思,做什么用的?
一、
RUNTIME_CLASS
Use this macro to get the run-time class structure from the name of a C++ class.
例如:CRuntimeClass* prt = RUNTIME_CLASS( CAge );
RUNTIME_CLASS returns a pointer to a CRuntimeClass structure for the class specified by class_name. Only CObject-derived classes declared with DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL will return pointers to a CRuntimeClass structure.
RUNTIME_CLASS(
class_name )
得到一个CRuntimeClass结构指针,一般和IsKindOf和创建时用
// in .H file
class CPerson : public CObject
{
DECLARE_DYNAMIC( CPerson )
public:
CPerson(){};
// other declaration
};
// in .CPP file
IMPLEMENT_DYNAMIC( CPerson, CObject )
void SomeFunction(void)
{
CObject* pMyObject = new CPerson;
if(pMyObject-> IsKindOf( RUNTIME_CLASS( CPerson ) ) )
{
//if IsKindOf is true, then cast is all right
CPerson* pmyPerson = (CPerson*) pMyObject ;
...
delete pmyPerson;
}
...
delete [MyObject];
}
Example
// example for RUNTIME_CLASS
CRuntimeClass* prt = RUNTIME_CLASS( CAge );
ASSERT( lstrcmp( prt-> m_lpszClassName, "CAge " ) == 0 );