#pragma once #include class Object { public: virtual std::string ToString() const = 0; virtual ~Object() {} }; class Child : public Object { public: explicit Child(const std::string& class_id): class_id_(class_id) {} std::string ToString() const override { return class_id_; } private: std::string class_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)()) {} private: std::string class_id; };