Run-time type information
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 :
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();
}
}
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 transtyper 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 transtypage échoue, c'est-à-dire 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.