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

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

用过虚拟函数的程序员,肯定对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) 要有默认构造函数

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航