#include <iostream>
#include <map>
using namespace std;
namespace sf
{
class Sprite
{
public:
void introduceYourself() const
{
cout<<"Sprite\n";
}
};
class Sound
{
public:
void introduceYourself() const
{
cout<<"Sound\n";
}
};
}
class CResource
{
public:
virtual ~CResource() {}
virtual void doSomething() const = 0;
};
class CSound : public CResource
{
public:
void doSomething() const
{
sound.introduceYourself();
}
private:
sf::Sound sound;
};
class CSprite : public CResource
{
public:
void doSomething() const
{
sprite.introduceYourself();
}
private:
sf::Sprite sprite;
};
class CResourceManager
{
public:
CResourceManager()
{
resourcesMap[0] = new CSprite;
resourcesMap[1] = new CSprite;
resourcesMap[2] = new CSound;
resourcesMap[3] = new CSound;
resourcesMap[4] = new CSprite;
}
~CResourceManager()
{
for( const auto &res : resourcesMap )
delete res.second;
}
void printResources()
{
for( const auto &res : resourcesMap )
res.second->doSomething();
}
private:
map<int, CResource*> resourcesMap;
};
int main() {
CResourceManager resMngr;
resMngr.printResources();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIHNmCnsKCWNsYXNzIFNwcml0ZQoJewoJcHVibGljOgoJCXZvaWQgaW50cm9kdWNlWW91cnNlbGYoKSBjb25zdAoJCXsKCQkJY291dDw8IlNwcml0ZVxuIjsKCQl9Cgl9OwoJCgljbGFzcyBTb3VuZAoJewoJcHVibGljOgoJCXZvaWQgaW50cm9kdWNlWW91cnNlbGYoKSBjb25zdAoJCXsKCQkJY291dDw8IlNvdW5kXG4iOwoJCX0KCX07Cn0KCmNsYXNzIENSZXNvdXJjZQp7CnB1YmxpYzoKCXZpcnR1YWwgfkNSZXNvdXJjZSgpIHt9Cgl2aXJ0dWFsIHZvaWQgZG9Tb21ldGhpbmcoKSBjb25zdCA9IDA7Cn07CgpjbGFzcyBDU291bmQgOiBwdWJsaWMgQ1Jlc291cmNlCnsKcHVibGljOgoJdm9pZCBkb1NvbWV0aGluZygpIGNvbnN0Cgl7CgkJc291bmQuaW50cm9kdWNlWW91cnNlbGYoKTsKCX0KCQpwcml2YXRlOgoJc2Y6OlNvdW5kIHNvdW5kOwp9OwoKY2xhc3MgQ1Nwcml0ZSA6IHB1YmxpYyBDUmVzb3VyY2UKewpwdWJsaWM6Cgl2b2lkIGRvU29tZXRoaW5nKCkgY29uc3QKCXsKCQlzcHJpdGUuaW50cm9kdWNlWW91cnNlbGYoKTsKCX0KCQpwcml2YXRlOgoJc2Y6OlNwcml0ZSBzcHJpdGU7Cn07CgpjbGFzcyBDUmVzb3VyY2VNYW5hZ2VyCnsKcHVibGljOgoJQ1Jlc291cmNlTWFuYWdlcigpCgl7CgkJcmVzb3VyY2VzTWFwWzBdID0gbmV3IENTcHJpdGU7CgkJcmVzb3VyY2VzTWFwWzFdID0gbmV3IENTcHJpdGU7CgkJcmVzb3VyY2VzTWFwWzJdID0gbmV3IENTb3VuZDsKCQlyZXNvdXJjZXNNYXBbM10gPSBuZXcgQ1NvdW5kOwoJCXJlc291cmNlc01hcFs0XSA9IG5ldyBDU3ByaXRlOwoJfQoJfkNSZXNvdXJjZU1hbmFnZXIoKQoJewoJCWZvciggY29uc3QgYXV0byAmcmVzIDogcmVzb3VyY2VzTWFwICkKCQkJZGVsZXRlIHJlcy5zZWNvbmQ7Cgl9CgkKCXZvaWQgcHJpbnRSZXNvdXJjZXMoKQoJewoJCWZvciggY29uc3QgYXV0byAmcmVzIDogcmVzb3VyY2VzTWFwICkKCQkJcmVzLnNlY29uZC0+ZG9Tb21ldGhpbmcoKTsKCX0KCQpwcml2YXRlOgoJbWFwPGludCwgQ1Jlc291cmNlKj4gcmVzb3VyY2VzTWFwOwoJCn07CgppbnQgbWFpbigpIHsKCUNSZXNvdXJjZU1hbmFnZXIgcmVzTW5ncjsKCQoJcmVzTW5nci5wcmludFJlc291cmNlcygpOwoJcmV0dXJuIDA7Cn0=