25 listopada 2013

[C++] RTTI - typeid

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