Mechanizm RTTI (Run Time Type Identification) wspierany jest w języku przez dwa mechanizmy:
- typeid - który zwraca typu danego wyrażenia
- dynamic_cast - który bezpiecznie konwertuje wskaźnik/referencję do klasy bazowej na wskaźnik/referencję do klasy pochodnej.
RTTI powinno być stosowany z ostrożnością. Kiedy to jest możliwe powinien być raczej stosowany mechanizm funkcji wirtualnych niż zarządzanie typami. Tutaja tylko mała właściwość typeid.
#include <iostream>
#include <typeinfo>
using namespace std;
struct Base {
};
struct Derived : public Base {
};
int main() {
int tab[24];
std::string s;
Derived d;
Base *b = &d;
cout << typeid(42).name() << endl;
cout << typeid(tab).name() << endl;
cout << typeid(s).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(*b).name() << endl;
cout << typeid(d).name() << endl;
return 0;
}
Wynik:
i
A24_i
Ss
P4Base
4Base
7Derived
Brak komentarzy:
Prześlij komentarz