C/C++ 反射

typedef std::shared_ptr<IBaseOperator> (*create_func)();
    class ObjFactory
    {
    private:
        static std::unordered_map<std::string, create_func>& get_map();
    public:
        static std::shared_ptr<IBaseOperator> create_obj(const std::string& name);
        static void register_cls(const std::string& name, create_func func);
    };

    class Register
    {
    public:
        Register(const std::string& name, create_func func);
    };

// 静态变量,有些编译器,在使用时才初始化,所以加了just_for_use
#define REGISTER_CLS(cls_name)\
class cls_name##Register \
{\
public:\
	static std::shared_ptr<IBaseOperator> new_instance()\
	{\
		return std::shared_ptr<IBaseOperator>(new cls_name);\
	}\
    static Register reg; \
};\
Register cls_name##Register::reg(#cls_name, cls_name##Register::new_instance); \
auto just_for_use = cls_name##Register::reg;

  

    class ObjFactory
    {
    private:
        static std::unordered_map<std::string, create_func>& get_map();
    public:
        static std::shared_ptr<IBaseOperator> create_obj(const std::string& name);
        static void register_cls(const std::string& name, create_func func);
    };

    class Register
    {
    public:
        Register(const std::string& name, create_func func);
    };

// 静态变量,有些编译器,在使用时才初始化,所以加了just_for_use
#define REGISTER_CLS(cls_name)\
class cls_name##Register \
{\
public:\
	static std::shared_ptr<IBaseOperator> new_instance()\
	{\
		return std::shared_ptr<IBaseOperator>(new cls_name);\
	}\
    static Register reg; \
};\
Register cls_name##Register::reg(#cls_name, cls_name##Register::new_instance); \
auto just_for_use = cls_name##Register::reg;

  

猜你喜欢

转载自www.cnblogs.com/yangwenhuan/p/12455452.html
今日推荐