Puedes heredar de una clase base, lo ideal sería utilizar una misma interfaz en tus objetos para evitar el downcasting. Ejemplo:
Código C++:
Ver original#include <iostream>
#include <string>
#include <map>
using namespace std;
class Object{
public:
virtual void test() = 0;
};
class A : public Object{
public:
void test(){
cout << "A::play()\n";
}
};
class B : public Object{
public:
void test(){
cout << "B::play()\n";
}
};
class C : public Object{
public:
void test(){
cout << "C::play()\n";
}
};
int main() {
map<string, Object*> myMap;
myMap["objectA"] = new A;
myMap["objectB"] = new B;
myMap["objectC"] = new C;
map<string, Object*>::iterator it;
for(it = myMap.begin(); it != myMap.end(); it++){
(*it).second->test();
delete (*it).second;
}
return 0;
}