#include #include #include class Object { public: virtual std::string ToString() const = 0; virtual ~Object() {} }; class Apple : public Object{ public: std::string ToString() const override { return "apple!"; } }; class List : public Object{ public: std::string ToString() const override { return "list"; } }; class Another : public Object{ public: std::string ToString() const override { return "yet another identifier"; } }; class Factory { std::vector> vec; public: Object* Create(const std::string& class_id) { Object* obj = nullptr; if (class_id == "apple!") { obj = new Apple(); } else if (class_id == "list") { obj = new List(); } else if (class_id == "yet another identifier") { obj = new Another(); } else { for (auto i : vec) { if (i.first == class_id) { obj = i.second(); break; } } } return obj; } void Register(const std::string& class_id, Object*(*instance_creator)()) { vec.push_back({class_id, instance_creator}); } };