#include #include #include class Object { public: virtual std::string ToString() const = 0; virtual ~Object() = default; }; class Object_N : public Object { private: std::string s_id; public: explicit Object_N(std::string s_i) { s_id = std::move(s_i); } std::string ToString() const override { return s_id; } }; class Factory { private: std::map> mode_fun; public: void Register(const std::string &class_id, class Object *(*instance_creator)()) { mode_fun[class_id] = instance_creator; } class Object *Create(const std::string &class_id) { if (mode_fun.count(class_id)) { return mode_fun[class_id](); } else { return new Object_N(class_id); } } };