#pragma once
#include<string>
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;
};