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

Como castear lista con objetos de distintos tipos

Estas en el tema de Como castear lista con objetos de distintos tipos en el foro de C/C++ en Foros del Web. Que tal miren mi problema es que tengo una lista con objetos de diferentes tipos, los tengo guardados en una lista con tipo void* @import ...
  #1 (permalink)  
Antiguo 07/11/2011, 11:59
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 5
Como castear lista con objetos de distintos tipos

Que tal miren mi problema es que tengo una lista con objetos de diferentes tipos, los tengo guardados en una lista con tipo void*

Código C++:
Ver original
  1. std::list<void *> objetos;
  2.  
  3. objetos.push_back(objetoTipoTriangulo);
  4. objetos.push_back(objetoTipoCuadrado);

el problema es que al momento de usarlos no sé como castearlos automáticamente mientras se recorre un iterador para poder usar los atributos de cada objeto. Digamos que en la lista no todos los objetos son Cuadrados, como comprobar de que tipo es el objeto para poder castearlo, intenté con typeid(objeto).name() pero me devuelve void* (el tipo del objeto en la lista).
Código C++:
Ver original
  1. std::list<void*>::iterator p = objetos.begin();
  2. while(p != objetos.end()) {
  3.     ((Cuadrado*)*p)->mostrar();
  4.     p++;
  5. }

Última edición por shujidan; 07/11/2011 a las 12:31
  #2 (permalink)  
Antiguo 07/11/2011, 12:51
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: Como castear lista con objetos de distintos tipos

Sugiero un cambio de solucion.

Haz una clase base, de la cual deriven los objetos que estas insertando en la lista.
La clase base tiene un metodo virtual que se llama mostrar() y las derivadas lo implementan, no sera necesario hacer cast alguno.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 07/11/2011, 16:56
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 5
Respuesta: Como castear lista con objetos de distintos tipos

Gracias asi lo hice pero en caso de que las clases no estuvieran relacionadas mas que por la funcion, esperaba que hubiera otra forma.
  #4 (permalink)  
Antiguo 08/11/2011, 04:02
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: Como castear lista con objetos de distintos tipos

La funcion y la lista esta tratando a iguales a objetos de distinto tipo. Los problemas que tienes son los "castigos" que recibes por solucionar tu problema al estilo C (punteros a void).

La solución Java es crear y usar interfaces, y luego hacer operaciones sobre tipos que no necesariamente están relacionados por herencia.

En C++ no existen las interfaces, el pretender usar clases abstractas como interfaces es escencialmente lo mismo que te propuse, pero parece no ser de tu agrado como solución.
__________________
Visita mi perfil en LinkedIn

Etiquetas: c++, list, objetos, std::list, void*, 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 18:38.