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   );

 

posted @ 2010-08-21 07:46  pjh123  阅读(674)  评论(0编辑  收藏  举报