#include <iostream>
#include <memory>
#include <vector>
struct Entity
{
virtual ~Entity() = default;
virtual void Update() { std::cout << "Entity\n"; }
};
struct NPC : Entity
{
virtual void Update() { std::cout << "NPC\n"; }
};
struct Trap : NPC
{
virtual void Update() { std::cout << "Trap\n"; }
};
int main() {
std::vector<std::unique_ptr<Entity>> entities;
entities.push_back(std::make_unique<Entity>());
entities.push_back(std::make_unique<NPC>());
entities.push_back(std::make_unique<Trap>());
for (auto& entity : entities)
{
entity->Update();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEVudGl0eQp7Cgl2aXJ0dWFsIH5FbnRpdHkoKSA9IGRlZmF1bHQ7Cgl2aXJ0dWFsIHZvaWQgVXBkYXRlKCkgeyBzdGQ6OmNvdXQgPDwgIkVudGl0eVxuIjsgfQp9OwoKc3RydWN0IE5QQyA6IEVudGl0eQp7Cgl2aXJ0dWFsIHZvaWQgVXBkYXRlKCkgeyBzdGQ6OmNvdXQgPDwgIk5QQ1xuIjsgfQp9OwoKc3RydWN0IFRyYXAgOiBOUEMKewoJdmlydHVhbCB2b2lkIFVwZGF0ZSgpIHsgc3RkOjpjb3V0IDw8ICJUcmFwXG4iOyB9Cn07CgoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RW50aXR5Pj4gZW50aXRpZXM7CgllbnRpdGllcy5wdXNoX2JhY2soc3RkOjptYWtlX3VuaXF1ZTxFbnRpdHk+KCkpOwoJZW50aXRpZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV91bmlxdWU8TlBDPigpKTsKCWVudGl0aWVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdW5pcXVlPFRyYXA+KCkpOwoJCglmb3IgKGF1dG8mIGVudGl0eSA6IGVudGl0aWVzKQoJewoJCWVudGl0eS0+VXBkYXRlKCk7Cgl9Cn0K