Accueil ⇒ Informatique ⇒ Langage C++ ⇒ Informations de type

Informations de type

Introduction

Les informations de type permettent de connaître le type des variables manipulées lors de l'exécution du programme. Cette fonctionnalité prend tout son sens en C++ où les notions d'objet et d'héritage rendent cette vérification parfois délicate. Nous allons voir comment le langage résout ce problème.

Outils à disposition

L'option en question nécessite une configuration du compilateur : en effet, avec les langages typés comme le C++, les informations de type ne sont plus accessibles après la compilation. Cette option dépend du compilateur.

Une fois cette formalité réglée, on peut utiliser l'opérateur typeid, qui sert à obtenir des informations sur le type d'une variable — voire directement sur un type donné, mais ce n'est pas notre propos ici. On lui passe en argument la variable en question. Ainsi, on peut vérifier si deux objets sont de même type ainsi :

if (typeid(objet1) == typeid(objet2)) {
    /* objet1 et objet2 ont le même type */
} else {
    /* objet1 et objet2 n'ont pas le même type */
}

Cet opérateur renvoie une référence sur une structure de donnée du type type_info, qui comporte notamment la méthode name() dont le nom est assez explicite. Vous devrez inclure l'en-tête <typeinfo> pour pouvoir exploiter ces entités. Ainsi, le code suivant affiche le type d'une variable (la forme du nom retournée dépend du compilateur).

int a = 8;
float b = 10.0f;
cout << "Type de a : " << typeid(a).name() << endl;
cout << "Type de b : " << typeid(b).name() << endl;

Exemple de résultat avec g++ 3.2 :

Type de a : i
Type de b : f

En fait, le type type_info ne comporte que deux méthodes, before et name, ainsi que quelques redéfinitions d'opérateurs classiques. Nous ne traiterons pas la méthode before ici.

Conclusion

Muni de ces quelques outils, vous devez être en mesure de déterminer sommairement le type d'un objet à l'exécution. Ces méthodes apportent des solutions aux problèmes les plus courants qui apparaissent dans ce domaine. Si néanmoins vous avez besoin de fonctions plus puissantes, il vous faudra sans doute les implémenter vous-même.