Informații despre tipul de rulare

În informatică , informațiile despre tipul de execuție sunt utilizate pentru a semnaliza capacitatea unui limbaj de programare de a determina tipul unei variabile în timpul executării unui program .

Deși este disponibil în majoritatea limbajelor de programare, termenul RTTI este adesea folosit în referință la C ++, care implicit determină tipul în timpul compilării . Această tastare dinamică explicită în C ++ - declarată prin utilizarea operației dynamic cast<> - diferă de cea automată din Objective-C pentru care tastarea și legarea se fac în timpul rulării.

Exemplu

Iată un exemplu de utilizare a RTTI în C ++:

struct Base { virtual void foo(); }; struct Derived : public Base { virtual void bar(); }; void f(Base* b) { b->bar(); // Ne compile pas car la classe Base n'a pas de méthode bar() // Le cast renvoie nullptr si le type de b n'est ou n'hérite pas de Derived if (Derived* d = dynamic_cast<Derived*>(b)) { d->bar(); } }

În acest exemplu dorim să numim metoda barei obiectului trecut ca parametru dacă este de tipul real Derivat (sau moștenind din Derivat) (vezi polimorfism ). Apelul nu poate fi efectuat direct deoarece clasa Base nu expune o metodă bar(). Prin urmare, vom încerca să aruncăm indicatorul de tip Base * într-un indicator de tip Derivat * folosind cuvânt cheie dynamic_cast. Acest apel poate:

  • Returnează un pointer nul (nullptr) dacă distribuția eșuează, adică tipul real nu este Derivat (sau moștenind din Derivat)
  • Întoarceți un indicator Derived * dacă distribuția are succes.

Pentru a face această verificare, dynamic_casttrebuie să aveți informații despre tip în timpul rulării și, prin urmare, are nevoie de RTTI.

Vezi și tu