通过类名称得到该类的新对象指针

用过虚拟函数的程序员,肯定对switch/case 句型带有一种不想用的心理,因为如果case过多的话,至少会有以下缺点:

1)  代码太长,不适合查看和管理;

2)  switch/case不够灵活;

3)  扩充性不够好,比如每增加一个case都要更改代码。

 

MFC有一个很好的框架,继承自CObject且通过DECLARE_DYNAMIC()IMPLEMENT_DYNAMIC声明的类,其动态创建类CRuntimeObject都会被加到类别型录网中去,如果能取得这个动态创建类,就能创建出该类对象。下面的代码就是在类别型录网中寻找类名对应的动态创建类,如果找到,就创建对象,并返回该对象指针;否则返回NULL

 

CObject* GetObjByClassName(CString strClassName)

{

CRuntimeClass *pClass;

AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

for(pClass = pModuleState->m_classList;pClass!=NULL;

              pClass=pClass->m_pNextClass) {

              if(strClassName.Compare(pClass->m_lpszClassName)==0){

                     return (pClass->CreateObject());

              }

       }

       return null;

}

 

返回的指针是CObject *类型,在得到后可以转换成你需要的类型!(注意安全控制哦)

 

注:

 1 继承自CObject

 2 DECLARE_DYNAMIC()IMPLEMENT_DYNAMIC声明

 3 要有默认构造函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值