#include <iostream>
#include <memory>
#include <map>
using namespace std;
struct Base {
virtual ~Base() {}
virtual void method() = 0;
};
struct Child : Base
{
void method() override { std::cout << "Child method" << std::endl; }
};
int main() {
map<string, unique_ptr<Base>> my_map;
my_map.insert(make_pair("Child1", unique_ptr<Base>(new Child)));
Base* ptr = my_map["Child1"].get();
ptr->method();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8bWFwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBCYXNlIHsKCXZpcnR1YWwgfkJhc2UoKSB7fQoJdmlydHVhbCB2b2lkIG1ldGhvZCgpID0gMDsKfTsKCnN0cnVjdCBDaGlsZCA6IEJhc2UKewoJdm9pZCBtZXRob2QoKSBvdmVycmlkZSB7IHN0ZDo6Y291dCA8PCAiQ2hpbGQgbWV0aG9kIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCmludCBtYWluKCkgewoJbWFwPHN0cmluZywgdW5pcXVlX3B0cjxCYXNlPj4gbXlfbWFwOwoJCglteV9tYXAuaW5zZXJ0KG1ha2VfcGFpcigiQ2hpbGQxIiwgdW5pcXVlX3B0cjxCYXNlPihuZXcgQ2hpbGQpKSk7CgkKCUJhc2UqIHB0ciA9IG15X21hcFsiQ2hpbGQxIl0uZ2V0KCk7CglwdHItPm1ldGhvZCgpOwoJCglyZXR1cm4gMDsKfQ==