/*
* C++动态创建对象基本原理
*/
#include <stdio.h>
#include <iostream>
#include <map>
#include <string>
using namespace std;
typedef void* (*pfCreateObject)();
map<string, pfCreateObject> g_Map;
template<typename T>
void* CreatePlugin()
{
return new T;
}
template<typename T>
class PluginRegister
{
public:
PluginRegister(string id)
{
g_Map[id] = CreatePlugin<T>;
}
};
//每个新增加在组件,都应该定义一个全局的注册类对象
class Example1
{
public:
Example1() { cout << "Example1构造函数被调用" << endl; }
};
PluginRegister<Example1> Example1_Register("Example1");
class Example2
{
public:
Example2() { cout << "Example2构造函数被调用" << endl; }
};
PluginRegister<Example2> Example2_Register("Example2");
int main()
{
g_Map["Example1"]();
g_Map["Example2"]();
getchar();
return 0;
}
在VC++和gcc下运行结果相同,输出结果为:
Example1构造函数被调用
Example2构造函数被调用