[go: up one dir, main page]

Aller au contenu

Run-time type information

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis RTTI)

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.

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.