class usv_base_act_factory
{
private:
/* data */
public:
usv_base_act_factory(/* args */) {};
virtual ~usv_base_act_factory() {};
virtual void init(void *param) {};
};
typedef void *(*CREATE_FUNC)();
class usv_base_act_create_factory {
public:
usv_base_act_create_factory() {};
~usv_base_act_create_factory() {};
// 通过map寻找对应的注册类
static void *CreateObject(const string &name)
{
map<string, CREATE_FUNC>::const_iterator it;
it = mapCls_.find(name);
if (it == mapCls_.end())
return 0;
else
return it->second(); //func();
}
//在工厂类中注册[注册类]
static void Register(const string &name, CREATE_FUNC func)
{
printf("usv_base_act_create_factory name = %s\n",name.c_str());
mapCls_[name] = func;
}
private:
static map<string, CREATE_FUNC> mapCls_;
};
class usv_act_factory_register {
public:
usv_act_factory_register(const string &name, CREATE_FUNC func) {
usv_base_act_create_factory::Register(name,func);
}
};
#define USV_BASE_ACT_REGISTER_CLASS(type_name) \
class usv_##type_name##_act_factory_register { \
public: \
static void* NewInstance() \
{ \
return new usv_##type_name##_act_factory; \
} \
private: \
static usv_act_factory_register reg_; \
}; \
usv_act_factory_register usv_##type_name##_act_factory_register::reg_(#type_name, usv_##type_name##_act_factory_register::NewInstance)
C++动态工厂的应用
最新推荐文章于 2024-06-01 18:28:10 发布