Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

rtti

Participa en el tema rtti en el foro Programación.
necesito obtener los atributos de un objeto, y su valor por ej tengo el objeto ...

Buscar en este tema:
 
  •  
    #1 rtti
    necesito obtener los atributos de un objeto, y su valor

    por ej tengo el objeto a, de la clase A.. q tiene de atributo un int x
    necesito que a me diga q es del tipo A, q me de los atributos q tiene, y el valor de c/u

    lei algo de un metodo typeid, pero no logro entender

    si alguien me puede tirar un ejemplo cortito me va a ayudar..

    gracias
    +
     
    0
    Me gusta
     
    | Más
  • #2 Re: rtti

    Te comento un poco para que entiendas... El lenguaje C / C++ carece de lo que se conoce en nuevos lenguajes mas actuales como la reflexion, basicamente la reflexion es la posibilidad de que programaticamente se puedan obtener metadatos sobre cada objeto o variable dentro de un lenguaje de programacion, en Java y .NET framework se pueden saber en tiempo de ejecucion cual es la clase del objeto cuales son las clases padre de esta, que interfaces implementa, que metodos tiene y se los puede invocar en runtine...

    Esto no es posible en C / C++ por el hecho de que C / C++ es un lenguaje compilado y no interpretado, y no es posible en runtime tener este tipo de informacion...

    Las facilidades de RTTI que provee C++ estandard es informacion basica del tipo de dato asi como algunos operadores seguros de casteo entre tipo de datos...

    para hacer uso de rtti, hay un operador llamado typeid(...) que aplicado a un tipo de dato o una variable / instancia nos da como resultado un objeto de tipo type_info con algunos metodos como name(), y algunos operadores de comparacion...

    Esto es para saber en tiempo de ejecucion de que tipo es una determinada variable, pero solo eso, y generalmente el resultado de typeid(...).name() varia entre ejeciciones del mismo programa y hasta de corridas en distintas maquinas, asi que no se deberia usar para reconocer el tipo del objeto o serializacion...

    Un ejemplo de esto seria asi:

    Código:
    #include<typeinfo>
    #include<iostream>
    
    class Base {
            public:
                     virtual void hacerAlgoBase() {
                               std::cout << "Estoy haciendo algo en la clase base..." << std::endl;
                     }
    };
    
    class Derivada: public Base {
            public:
                     virtual void hacerAlgoDerivada() {
                               std::cout << "Estoy haciendo algo en un metodo de la clase derivada" << std::endl;
                     }
    };
    
    int main(int argc, char** argv) {
               Base* claseBase = new Base();
               Base* claseDerivada = new Derivada();
    
              claseBase->hacerAlgoBase();
              claseDerivada->hacerAlgoBase();
    
              // Aca uso RTTI para inferir que claseDerivada es una instancia de Derivada y casteo acorde de forma segura
              if (typeid(claseDerivada) == typeid(Derivada)) {
                 Derivada* casteada = dynamic_cast<Derivada*>(claseDerivada);
                 // Es seguro castear porque el typeid me da igual
                 // Es seguro llamar a metodos de la clase derivada una vez casteados
                 casteada->hacerAlgoDerivada();
              }
    
              delete claseBase;
              delete claseDerivada;
              return 0;
    }
    
    Mas que esto no se puede hacer con el lenguaje C++, hay algunos frameworks que te permiten hacer reflection pero no estan del todo funcionales o son muy complejos de usar...

    Saludos
    Pablo
    Me gusta este mensaje
  • #3 Re: rtti

    osea q no hay forma de saber de q esta compuesto un objeto q me llega??
    lo q yo tengo q hacer es recibir un objeto, y guardar en un vector (o una archivo, no importa) sus campos..
    no necesito saber el nombre de la clase del objeto ni nada

    supongamos q me llega un objeto Alumno..
    necesito poder "diferenciar" los campos como para poder guardarlos uno por uno
    y crear un vector[3] con los valores de Nombre, DNI y Legajo (no importa el nombre, pero si de q tipo son y el valor)
    Me gusta este mensaje
  • #4 Re: rtti

    No, lamentablemente no podes hacer eso en estandard C++, tal vez alguna libreria te lo permita pero no conozco ninguna...

    Saludos
    Pablo
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 3 RESPUESTAS
  • 94 VISTAS
  • 2 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB