#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
struct Entity;
static std::vector<Entity*> entities;
struct Entity
{
std::string entityName;
Entity(const std::string &name) : entityName(name)
{
entities.push_back(this);
}
Entity(const Entity &src)
: Entity(src.entityName)
{
}
~Entity()
{
auto iter = std::find(entities.begin(), entities.end(), this);
if (iter != entities.end())
entities.erase(iter);
}
void Draw()
{
// do drawing things
std::cout << "drawing " << entityName << " ..." << std::endl;
}
};
Entity player("player");
Entity enemy("enemy");
void renderEntities()
{
for (auto *entity : entities)
{
entity->Draw();
}
}
int main()
{
renderEntities();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IEVudGl0eTsKc3RhdGljIHN0ZDo6dmVjdG9yPEVudGl0eSo+IGVudGl0aWVzOwoKc3RydWN0IEVudGl0eQp7ICAgIAogICAgc3RkOjpzdHJpbmcgZW50aXR5TmFtZTsKICAgIAogICAgRW50aXR5KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IGVudGl0eU5hbWUobmFtZSkKICAgIHsKICAgICAgICBlbnRpdGllcy5wdXNoX2JhY2sodGhpcyk7CiAgICB9CgogICAgRW50aXR5KGNvbnN0IEVudGl0eSAmc3JjKQogICAgICAgIDogRW50aXR5KHNyYy5lbnRpdHlOYW1lKQogICAgewogICAgfQoKICAgIH5FbnRpdHkoKQogICAgewogICAgICAgIGF1dG8gaXRlciA9IHN0ZDo6ZmluZChlbnRpdGllcy5iZWdpbigpLCBlbnRpdGllcy5lbmQoKSwgdGhpcyk7CiAgICAgICAgaWYgKGl0ZXIgIT0gZW50aXRpZXMuZW5kKCkpCiAgICAgICAgICAgIGVudGl0aWVzLmVyYXNlKGl0ZXIpOwogICAgfQoKICAgIHZvaWQgRHJhdygpCiAgICB7CiAgICAgICAgLy8gZG8gZHJhd2luZyB0aGluZ3MKICAgICAgICBzdGQ6OmNvdXQgPDwgImRyYXdpbmcgIiA8PCBlbnRpdHlOYW1lIDw8ICIgLi4uIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpFbnRpdHkgcGxheWVyKCJwbGF5ZXIiKTsKRW50aXR5IGVuZW15KCJlbmVteSIpOwoKdm9pZCByZW5kZXJFbnRpdGllcygpCnsKICAgIGZvciAoYXV0byAqZW50aXR5IDogZW50aXRpZXMpCiAgICB7CiAgICAgICAgZW50aXR5LT5EcmF3KCk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgcmVuZGVyRW50aXRpZXMoKTsKCXJldHVybiAwOwp9