#include <iostream>
#include <string>
#include <map>
using namespace std;
typedef void* (*pCreateObject)(void);
class ClassFactory
{
private:
map<string, pCreateObject> m_classMap;
ClassFactory() {};
public:
void* CreateObjectByName(string className)
{
map<string, pCreateObject>::const_iterator iter;
iter = m_classMap.find(className);
if (iter == m_classMap.end())
return NULL;
else
return iter->second(); //函数指针的调用
}
void registClass(string name, pCreateObject method)
{
m_classMap.insert(pair<string, pCreateObject>(name, method));
}
static ClassFactory& getInstance()
{
{
static ClassFactory cf;
return cf;
}
}
};
template <typename T>
T* createObj(void)
{
return new T;
}
class RegisterAction {
public:
RegisterAction(string className, pCreateObject ptrCreateFn) {
ClassFactory::getInstance().registClass(className, ptrCreateFn);
}
};
#define REGISTER_CLASS(className
C++ 通过一个字符串来创建一个已有的类对象
最新推荐文章于 2022-02-08 10:01:25 发布