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

Como hacer que typeid retorne el tipo del objeto 'hijo'

Estas en el tema de Como hacer que typeid retorne el tipo del objeto 'hijo' en el foro de C/C++ en Foros del Web. Buenas! Tengo la clase "Component" con una variable Código: std::string llamada 'name' cuyo valor se pone a traves de una función como Código: typeid(this).name() . ...
  #1 (permalink)  
Antiguo 28/11/2012, 13:08
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Como hacer que typeid retorne el tipo del objeto 'hijo'

Buenas!
Tengo la clase "Component" con una variable
Código:
std::string
llamada 'name' cuyo valor se pone a traves de una función como
Código:
typeid(this).name()
. El problema es que cuando una clase hereda de esa ( por ejemplo
Código:
 class Cube : public Component
) el typeid sigue siendo Component y por tanto el name de esta. Si quisiera que el name del Cube fuese 'Cube', pero desde la función del Component...¿Como podría hacerlo?

Para los que se hayan liado os dejo el codigo:

Component

Código:
std::string name;

Component::Component()
{
   generateUniqueName();
}    

void generateUniqueName(void)
{
  name = typeid(this).name();
}
}
  #2 (permalink)  
Antiguo 29/11/2012, 01:52
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Como hacer que typeid retorne el tipo del objeto 'hijo'

Para ese caso tendrías que hacerlo así (utilizo struct por efectos prácticos):

Código C++:
Ver original
  1. #include <iostream>
  2. #include <typeinfo>
  3. using namespace std;
  4.  
  5. struct Component{
  6.     virtual void printUniqueName(){
  7.         cout << typeid(*this).name() << endl;
  8.     }
  9. };
  10.  
  11. struct Cube : Component{
  12.  
  13. };
  14.  
  15. int main(){
  16.     Component com;
  17.     Cube cub;
  18.  
  19.     com.printUniqueName();
  20.     cub.printUniqueName();
  21. }

OJO: Si tratas de invocar a la función virtual desde el constructor no te va a funcionar.
  #3 (permalink)  
Antiguo 29/11/2012, 13:56
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Como hacer que typeid retorne el tipo del objeto 'hijo'

Si llamada desde el main devuelve correctamente el type, pero necesito que se haga de manera automatica. Es decir, que se llame desde el constructor del Component.
  #4 (permalink)  
Antiguo 30/11/2012, 00:05
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Como hacer que typeid retorne el tipo del objeto 'hijo'

Para eso necesitas utilizar funciones virtuales, y la llamada a una función virtual desde el constructor sólo te garantiza la ejecución del método en la clase base (por ende sólo podrás identificar la clase base), esto es una cuestión implementada en el compilador como medida de protección ya que sino podrías estar accediendo a un objeto parcialmente creado (en este caso el objeto de la clase derivada). En fin, tal vez valga la pena que revises un poco el diseño de tus clases.
  #5 (permalink)  
Antiguo 01/12/2012, 06:12
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Como hacer que typeid retorne el tipo del objeto 'hijo'

Ok, gracias por las respuestas. Intentare hacerlo de otro modo entonces.

Etiquetas: objeto, retorne, string, tipo, variables
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 01:11.