Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Alguna manera de añadir diferentes tipos de objetos a un std::map?

Estas en el tema de ¿Alguna manera de añadir diferentes tipos de objetos a un std::map? en el foro de C/C++ en Foros del Web. Buenas! Intento añadir a un map cada objeto que cargue con el programa. El problema que cada objeto es de una clase diferente y en ...
  #1 (permalink)  
Antiguo 22/09/2012, 05:20
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
¿Alguna manera de añadir diferentes tipos de objetos a un std::map?

Buenas!
Intento añadir a un map cada objeto que cargue con el programa. El problema que cada objeto es de una clase diferente y en el map solo puedo indicar un solo type.

Por ejemplo, para los que entendais de C#, intento hacer lo mismo que con un dictionary:

Código:
Dictionary<string, object> loaded = new Dictionary<string, object>();
Un saludo!
  #2 (permalink)  
Antiguo 27/09/2012, 13:23
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: ¿Alguna manera de añadir diferentes tipos de objetos a un std::map?

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
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. using namespace std;
  5.  
  6.  
  7.  
  8. class Object{
  9.     public:
  10.     virtual void test() = 0;
  11. };
  12.  
  13. class A : public Object{
  14.     public:
  15.     void test(){
  16.         cout << "A::play()\n";
  17.     }
  18. };
  19.  
  20. class B : public Object{
  21.     public:
  22.     void test(){
  23.         cout << "B::play()\n";
  24.     }
  25. };
  26.  
  27. class C : public Object{
  28.     public:
  29.     void test(){
  30.         cout << "C::play()\n";
  31.     }
  32. };
  33.  
  34.  
  35. int main() {
  36.     map<string, Object*> myMap;
  37.  
  38.     myMap["objectA"] = new A;
  39.     myMap["objectB"] = new B;
  40.     myMap["objectC"] = new C;
  41.  
  42.     map<string, Object*>::iterator it;
  43.     for(it = myMap.begin(); it != myMap.end(); it++){
  44.         (*it).second->test();
  45.         delete (*it).second;
  46.     }
  47.  
  48.     return 0;
  49. }
  #3 (permalink)  
Antiguo 28/09/2012, 13:57
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: ¿Alguna manera de añadir diferentes tipos de objetos a un std::map?

Muchas gracias por la solución!

Etiquetas: int, manera, objetos, programa, string, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.