#include <iostream>
#include <vector>
#include <set>
#include <string>
using std::string;
using std::cout;
using std::cin;
using std::vector;
using std::endl;
string class_id;
class Object {
public:
virtual std::string ToString() const = 0;
virtual ~Object() {}
};
class Smth : public Object {
public:
Smth(const std::string &class_id) {
class_id_ = class_id;
}
std::string ToString() const override {
return class_id_;
}
private:
std::string class_id_;
};
Object *my_new_smth_() {
return new Smth(class_id);
}
class Factory {
public:
Object *Create(const std::string &class_id) {
return my_new_smth_();
}
void Register(const std::string &class_id, Object *(*instance_creator)()) {
instance_creator()->ToString() = class_id;
}
};