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