Dynamic Creation ----------- Imitate from Inside MFC

本文探讨了RTTI在MFC中的实现机制,重点介绍了CRuntimeClass类及其相关成员函数,如CreateObject()和Load()。通过这些函数,可以实现运行时类型信息管理和对象的动态创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
            }
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值