© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 20/12/1999 - Dernière mise à jour : 13/01/2000
Operateur typeidBibliographie
Exception bad_typeid
Classe type_info
Syntaxe
typeid (type-id)
typeid (expression) |
Le résultat d'une expression typeid est un const type_info&. La valeur est une référence à un objet de la classe type_info qui représente soit le type-id soit le type de l'expression, selon la forme de typeid utilisée.
L'opérateur typeid effectue un test run-time lorsqu'il est appliqué à une l-value d'un type de classe polymorphique, où le véritable type de l'objet ne peut être déterminé par l'information statique fournie, ce qui arrive dans les cas suivants :
class Base { ... };
class Derived : public Base { ... }; void f() { Derived* pd = new Derived; Base* pb = pd; ... const type_info& t = typeid (pb); // t holds pointer type_info const type_info& t1 = typeid (*pb); // t1 holds Derived info ... } |
Si l'expression est une déréférence de pointeur, et si la valeur du pointeur est nulle, typeid lève l'exception bad_typeid. Si le pointeur n'est pas valide, c'est une exception __non_rtti_object qui est levée.
Si l'expression n'est ni un pointeur ni une référence à une classe de base de l'objet, le résultat est une référence de type_info représentant le type statique de l'expression.
class bad_typeid : public logic {
public: bad_typeid (const char * what_arg) : logic(what_arg) {} void raise () { handle_raise(); throw *this; } // virtual __exString what() const; //inherited }; |
L'entête typeinfo.h doit être
inclus pour pouvoir utiliser la classe type_info.
class type_info {
public: virtual ~type_info(); int operator == (const type_info& rhs) const; int operator !=( const type_info& rhs) const; int before (const type_info& rhs) const; const char* name() const; const char* raw_name() const; private:
|
Les opérateurs == et != peuvent être utilisés pour comparer deux objets type_info.
La donnée membre type_info::name pointe sur une chaîne de caractères constante terminée par zéro qui représente un nom de type lisible.
La donnée membre type_info::raw_name pointe sur une chaîne de caractères constante terminée par zéro qui représente un nom de type "décoré". Il représente un codage interne du nom, non lisible mais plus compact et plus efficace pour les comparaisons.
La norme RTTI est activée dans le compilateur Visual C++ 4.0 en cochant la case correspondante dans le menu Project Setting :
© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique