Help Desk
RTTI  typeid 

Gostaria de saber mais sobre RTTI. Será que você pode me ajudar? 
Vitor Rafael 

RTTI - Run Time Type Identification - é uma das facilidades do C++ para a criação de funções genéricas, ou seja, funções em que o mesmo código atua sobre diferentes tipos de dados. 

Você pode implementar funções genéricas em que a adequação do código aos tipos de dados efetivamente usados na chamada da função será resolvida em tempo de compilação valendo-se de
template.

Para identificar os tipos de dados em tempo de execução,  use
typeid. Você deve incluir em seu código o arquivo header typeinfo.h para usar typeid, cuja forma geral é

typeid(objeto);

onde
objeto é o objeto cujo tipo se quer identificar.

typeid retorna uma referência para um objeto do tipo type_info que contém as informações sobre o tipo do objeto fornecido na chamada de typeid

type_info provê - além dos operadores == e != - duas funções membros públicas: name e before

A função
name retorna o nome do tipo do objeto fornecido na chamada da função typeid.

A função
before retorna true ou false para se verificar a ordem de declaração de dois objetos.

Veja o exemplo:

#include <iostream.h>
#include <typeinfo.h>

class A { };
class B : A { };

void main() 
{
   char C;
   float X;

// USE THE typeinfo::operator==()TO MAKE COMPARISON

if (typeid( C ) == typeid( X ))
   {
    cout << "C and X are the same type." << endl;
   }
else {
      cout << "C and X are NOT the same type." << endl;
     }

// USE true AND false LITERALS TO MAKE COMPARISON

   cout << typeid(int).name();
   cout << " before " << typeid(double).name() << ": " <<
            (typeid(int).before(typeid(double)) ? true : false) <<             endl;

    cout << typeid(double).name();
    cout << " before " << typeid(int).name() << ": " <<
            (typeid(double).before(typeid(int)) ? true : false) <<             endl;

    cout << typeid(A).name();
    cout << " before " << typeid(B).name() << ": " <<
            (typeid(A).before(typeid(B)) ? true : false) << endl;
}

Resultados:

C and X are NOT the same type.
int before double: 0
double before int: 1
A before B: 1    


Autor:  Dagoberto Haele Arnaut
Exemplos extraídos de Borland C++ 5.0 Programmer's Guidel

| Home | Bookmarks | Universidades | Para Saber mais | Universidades | WEB Directory | Mapa do site |