#include class Object { public: virtual std::string ToString() const = 0; virtual ~Object() {} }; class ObjIns : public Object { public: ObjIns(const std::string& class_id): id(class_id) {} std::string ToString() const override { return id; } private: std::string id; }; class Factory { public: Factory() {} Object* Create(const std::string& class_id) { return new ObjIns(class_id); } void Register(const std::string& class_id, Object* (*func)()) { } };