16,472
社区成员
发帖
与我相关
我的任务
分享
class ClassInfo
{
CString m_szName;
CRuntimeClass * m_pClassObject;
public:
ClassInfo(LPCTSTR name =_T(""), CRuntimeClass *pObject=NULL):m_szName(name),m_pClassObject(pObject){};
ClassInfo(const ClassInfo& ci): m_szName(ci.m_szName), m_pClassObject(ci.m_pClassObject) {};
ClassInfo & operator=(const ClassInfo & ci)
{
if(this == &ci) return * this;
m_szName = ci.m_szName;
m_pClassObject = ci.m_pClassObject;
return *this;
};
Base* Create(){return m_pClassObject->CreateObject();}
};
#define DEFINE_MAP( classname) ClassInfo(#classname, RUNTIME_CLASS(classname))
ClassInfo arrMap[] = {
DEFINE_MAP(class1),
DEFINE_MAP(class2),
DEFINE_MAP(class3),
DEFINE_MAP(class4),
DEFINE_MAP(class5),
DEFINE_MAP(class6),
DEFINE_MAP(class7),
ClassInfo()
};
Base* Create(CString name)
{
int i;
for(i=0; ;i++)
{
if( arrMap[i].m_szName == _T("")) return NULL;
if(arrMap[i].m_szName == name) return arrMap[i].Create();
};
return NULL;
}
Base* CreateInstance(CString name)
{
if(name.Compare("class1") == 0) return new class1;
if(name.Compare("class2") == 0) return new class2;
if(name.Compare("class3") == 0) return new class3;
if(name.Compare("class4") == 0) return new class4;
return 0;
}