Reconnaissance de types d'objets en C++

typeof() pour c++ ?

On vous l'a maintes fois répété : En C++, il n'est pas possible de connaître le type d'un objet durant l'execution...et bien non, c'est tout a fait possible ! moyennant la mise en oeuvre de RTTI (Run Time Type Information). Les puristes vous diront que le langage objet est fait pour se délester des problèmes de typage grâce aux fonctions virtuelles. Certes, mais une astuce reste une astuce et des fois ça peut nous sortir du pétrin donc autant en faire profiter !Le mécanisme de reconnaissance d'objet se réalise avec la classe type_info et l'opérateur typeid


exemple:

  1. #include
  2. #include
  3.  
  4. using namespace std;
  5.  
  6. class A
  7. {
  8.     public:
  9.      A(){}
  10.      virtual ~A(){};
  11. };
  12.  
  13. class B : public A
  14. {
  15. };
  16.  
  17. int main (int, char**)
  18. {
  19.     A a;
  20.     B b;
  21.  
  22.     cout "la classe A est de type : " typeid(A).name()
  23.     cout "a est de type : " typeid(a).name()
  24.     cout "b est de type : " typeid(b).name()
  25.  
  26.     A a2;
  27.  
  28.     cout "type[a2] == type[a] ? " typeid(a) == typeid(a2))
  29.     cout "type[a2] == type[b] ? " typeid(a) == typeid(b))
  30.  
  31.     A * pa = new A;
  32.     A * pb = new B;
  33.  
  34.     cout "pa est de type : " typeid(*pa).name()
  35.     cout "pb est de type : " typeid(*pb).name()
  36.  
  37.  
  38. }
  39.  
  40. ----------------------------------------------------------
  41. la classe A est de type : class A
  42. a est de type : class A
  43. b est de type : class B
  44. type[a2] == type[a] ? 1
  45. type[a2] == type[b] ? 0
  46. pa est de type : class A
  47. pb est de type : class B
  48. ----------------------------------------------------------

Vous remarquerez que la fonction name() renvoie le nom de la class préfixée par le mot class.
N'oubliez pas d'activer enable RunTime Type Info dans Visual Studio (option de compilation /GR) .

Paru aussi sur cppfrance

Publié mercredi 18 janvier 2006 09:23 par Poppyto
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39