65,187
社区成员




#include <iostream>
#include <vector>
using namespace std;
vector<void *> vtClass;
class BaseClass
{
public:
virtual char *GetClassName(){ return NULL; };
virtual void *GetNewInstance(){ return NULL; };
};
#define CLASS_BEGIN(ClassName) class ClassName:public BaseClass\
{\
public:\
char *GetClassName(){ return m_pszClassName; }\
ClassName(char *pszClassName){m_pszClassName = pszClassName;vtClass.push_back(this);}\
void *GetNewInstance(){return (void *)new ClassName();}\
private:\
char *m_pszClassName;\
public:\
ClassName(){}\
private:
#define CLASS_END(ClassName) };ClassName g_##ClassName (#ClassName);
void *GetClass(char *pszClassName)
{
vector<void *>::iterator i;
for (i =vtClass.begin(); i !=vtClass.end(); ++i)
{
BaseClass *p = (BaseClass *)*i;
if (0 == strcmp(p->GetClassName(), pszClassName))
{
return p->GetNewInstance();
}
}
return NULL;
}
CLASS_BEGIN(Class1)
private:
int m_nP1;
float m_fP1;
void Func1();
public:
double m_dP1;
__int64 m_n64P1;
void Func2();
CLASS_END(Class1)
CLASS_BEGIN(Class2)
private:
int m_nP2;
float m_fP2;
void Func11();
public:
double m_dP2;
__int64 m_n64P2;
void Func22();
CLASS_END(Class2)
int main(int, char **, char **)
{
Class1 *p1 = (Class1 *)GetClass("Class1");
Class2 *p2 = (Class2 *)GetClass("Class2");
void *p3 = GetClass("Class3");
return 0;
}
CLASS_BEGIN(ClassName)
// 这里定义成员变量和函数
CLASS_END(ClassName)
Class1 *p_class1;
Class2 *p_class2;
void *p_classn;
if (0==strcmp(p_cls,"Class1")) {p_class1=new Class1;p_classn=(void *)p_class1;}
else if (0==strcmp(p_cls,"Class2")) {p_class2=new Class2;p_classn=(void *)p_class2;}
#define createClass(name) \
Class##name * temp = new Class#name();