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;