Run-time type information

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En informatique, Run-Time Type Information est utilisé pour signaler la capacité d'un langage de programmation à déterminer le type d'une variable pendant l'exécution d'un programme.

Bien que disponible dans la plupart des langages de programmation, le terme RTTI est souvent utilisé en référence au C++ qui par défaut, détermine le type à la compilation. Ce typage dynamique explicite en C++ – déclaré par l'utilisation de l'opération dynamic_cast<> – diffère de celui automatique de l'Objective-C pour lequel le typage et l'édition de liens sont réalisés lors de l'exécution.

Exemple[modifier | modifier le code]

Voici un exemple d'utilisation du RTTI en C++ :

 1 struct Base {
 2     virtual void foo();
 3 };
 4 
 5 struct Derived : public Base {
 6     virtual void bar();
 7 };
 8 
 9 void f(Base* b) {
10 
11     b->bar(); // Ne compile pas car la classe Base n'a pas de méthode bar()
12 
13     // Le cast renvoi nullptr si le type de b n'est ou n'hérite pas de Derived
14     if (Derived* d = dynamic_cast<Derived*>(b)) {
15         d->bar();
16     }
17 }

Dans cet exemple on souhaite appeler la méthode bar de l'objet passé en paramètre si celui-ci est de type réel Derived (ou héritant de Derived) (cf polymorphisme). L'appel ne peut pas se faire directement car la classe Base n'expose pas de méthode bar(). On va donc essayer de caster le pointeur de type Base* en un pointeur de type Derived* en utilisant mot clé dynamic_cast. Cet appel peut soit:

  • Renvoyer un pointeur null (nullptr) si le cast échoue càd que le type réel n'est pas Derived (ou héritant de Derived)
  • Renvoyer un pointeur Derived* si le cast réussi.

Pour faire cette vérification dynamic_cast a besoin d'avoir des informations sur le type au moment de l’exécution, et donc besoin du RTTI.

Voir aussi[modifier | modifier le code]