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

博客指出switch/case句型在case过多时有代码长、不灵活、扩充性差等缺点。介绍了MFC框架中,继承自CObject且经特定声明的类,其动态创建类会加入类别型录网。给出在类别型录网中根据类名创建对象的代码,并提醒转换指针类型时注意安全控制。

被折叠的 条评论
为什么被折叠?



