RTTI

De ccppbrasil.org

Run time type identification (RTTI) é a capacidade de identificar o tipo de um objeto em tempo de execução, em C++ isso é feito com o operador typeid e o dynamic_cast.

Exemplo

#include <iostream>
#include <typeinfo>

class A {
public:
	virtual ~A() {}
};
class B : public A {
};

void printType(const A& a) {
	using namespace std;
	
	if (typeid(a) == typeid(B))
		cout << "Sou um B\n";
	if (typeid(a) == typeid(const B))
		cout << "Sou um const B\n";
	if (typeid(a) == typeid(A))
		cout << "Sou um A\n";
}

int main() {
	B b;
	printType(b);
	return 0;
}

O programa acima deve imprimir na saída:

b tem o mesmo tipo de B
b tem o mesmo tipo de const B

Considerações

Use RTTI apenas nos poucos casos onde ele se faz estritamente necessário, a grande maioria das vezes ele pode ser substituido pelo uso de polimorfismo, o exemplo dado é um deles.

Checagens de tipo em tempo de execução também são mais inseguras e lentas que checagens de tipo em tempo de compilação, lenta pois você precisa escrever toda uma lógica, que será executada em um tempo X, para usar RTTI, insegura pois você pode inserir bugs no programa ao escrever esta lógica.

Veja também

Ferramentas pessoais