C++动态工厂的应用

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) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值