Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1411 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  type_info : comment est-elle instanciée ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

type_info : comment est-elle instanciée ?

n°597363
blackgodde​ss
vive le troll !
Posté le 27-12-2003 à 00:54:50  profilanswer
 

bonjour,
 
je me pose des questions sur la classe : type_info
c'est apparement le type de retour de l'operateur typeid
 
j'ai trouvé sa déclaration dans un header de mon compilo :
 

Code :
  1. class type_info {
  2. public:
  3.     _CRTIMP virtual ~type_info();
  4.     _CRTIMP int operator==(const type_info& rhs) const;
  5.     _CRTIMP int operator!=(const type_info& rhs) const;
  6.     _CRTIMP int before(const type_info& rhs) const;
  7.     _CRTIMP const char* name() const;
  8.     _CRTIMP const char* raw_name() const;
  9. private:
  10.     void *_m_data;
  11.     char _m_d_name[1];
  12.     type_info(const type_info& rhs);
  13.     type_info& operator=(const type_info& rhs);
  14. };


 
elle n'a pas de constructeur par defaut, et son unique constructeur est privé, pourtant l'operateur typeid doit bien l'instancier ?
 
sinon, est-ce possible (techniquement, je parle pas de l'interet) de surcharger cet operateur typeid ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 27-12-2003 à 00:54:50  profilanswer
 

n°597364
Taz
bisounours-codeur
Posté le 27-12-2003 à 00:57:40  profilanswer
 

cette implémentation est complètement dépendante de ton compilateur? si tu veux les manipuler, c'est pas const & et tu récupère ça avec l'opérateur typeid()

n°597368
blackgodde​ss
vive le troll !
Posté le 27-12-2003 à 01:09:36  profilanswer
 

name et raw_name sont des méthodes standards ? et leur résultat ?
 
par exemple avec mon compilo :
 

Code :
  1. struct Test
  2. {
  3. };
  4. void main()
  5. {
  6. Test t;
  7. cout << typeid(t).name() << endl; // va ecrire "struct Test"
  8. cout << typeid(&t).name() << endl; // va ecrire "struct Test *"
  9. }


 
et raw_name va renvoyer le nom décoré
 
le format de la réponse est-il standard ? les décorations ?


Message édité par blackgoddess le 27-12-2003 à 01:10:29

---------------
-( BlackGoddess )-
n°597369
Taz
bisounours-codeur
Posté le 27-12-2003 à 01:19:32  profilanswer
 

1) int main
2) dans une certaine mesure oui. ceci est décrit dans l'ARM. les compilateurs ont la libertés de mettre en oeuvre des techniques de compression pour des raisons d'efficacité (un symbole brut C++ peut facilement faire 4Ko, ça fait très mal, imagine ce que ça ferait de faire une faute de page à chaque fois)

n°597371
Taz
bisounours-codeur
Posté le 27-12-2003 à 01:22:28  profilanswer
 

normalement tu dois obtenir ceci
 
4Test
P4Test
 
l'utilitaire gnu c++filt permet de décrypter ses symboles (la convention est très simple, mais le mélange devient difficile à lire)
 

n°597437
blackgodde​ss
vive le troll !
Posté le 27-12-2003 à 13:00:47  profilanswer
 

j'obtiens
 
.?AUTest@@
.PAUTest@@
 
avec vc++7 :(


---------------
-( BlackGoddess )-
n°600266
Taz
bisounours-codeur
Posté le 01-01-2004 à 16:14:16  profilanswer
 

ben spa normal, je crois bien que la norme impose bien une base commune

n°600288
blackgodde​ss
vive le troll !
Posté le 01-01-2004 à 17:08:43  profilanswer
 

ceux qui voudraient bien pourraient tester ceci et dire leur compilo + le resultat svp ?
 

Code :
  1. struct Test
  2. {
  3. };
  4.  
  5. int main()
  6. {
  7.   Test t;
  8.   cout << typeid(t).raw_name() << endl;
  9.   cout << typeid(&t).raw_name() << endl;
  10. }


 
merci :)


---------------
-( BlackGoddess )-
n°600297
Kristoph
Posté le 01-01-2004 à 17:23:34  profilanswer
 

BlackGoddess a écrit :

ceux qui voudraient bien pourraient tester ceci et dire leur compilo + le resultat svp ?
 

Code :
  1. struct Test
  2. {
  3. };
  4.  
  5. int main()
  6. {
  7.   Test t;
  8.   cout << typeid(t).raw_name() << endl;
  9.   cout << typeid(&t).raw_name() << endl;
  10. }


 
merci :)


 

Code :
  1. typeinfo.cpp: In function `int main()':
  2. typeinfo.cpp:8: error: `cout' undeclared (first use this function)
  3. typeinfo.cpp:8: error: (Each undeclared identifier is reported only once for each function it appears in.)
  4. typeinfo.cpp:8: error: must #include <typeinfo> before using typeid
  5. typeinfo.cpp:8: error: `endl' undeclared (first use this function)
  6. typeinfo.cpp:9: error: must #include <typeinfo> before using typeid


 
 
:whistle:
 
Abstraction faite de ces quelques problèmes, GCC 3.3.1 ne connais pas raw_name du tout

n°600307
Mordock
Posté le 01-01-2004 à 17:51:54  profilanswer
 

Resultat sous Visual 6
.?AUTest@@
.PAUTest@@
Press any key to continue

mood
Publicité
Posté le 01-01-2004 à 17:51:54  profilanswer
 

n°600316
Taz
bisounours-codeur
Posté le 01-01-2004 à 18:15:31  profilanswer
 

1) raw_name n'existe pas
2) la norme de codage de VC est complètement à part apparemment, ce qui explique le gros bordel que c'est de linker autre chose que du VC avec du VC.
sinon voir dans l'ARM 7.2.1c pour quelque chopse de moins fantasque et suivi par g++
 
 
t -> 4Test 4 étant la longueur du nom
&t -> P4Test le P représentant la nature pointeur

n°600371
blackgodde​ss
vive le troll !
Posté le 01-01-2004 à 20:27:42  profilanswer
 

merci :) v me documenter :p


---------------
-( BlackGoddess )-
n°600542
gilou
Modérateur
Modzilla
Posté le 02-01-2004 à 02:31:24  profilanswer
 

VC++ 6 et VC++ .NET:  
.?AUTest@@
.PAUTest@@
 
(Passé un max de temps a configurer VC++ .NET pour 1) faire une appli en mode console [le wizard est pas installe par defaut] et 2) virer les options tenant absolument a linker le code avec les MFC.
A+,


Message édité par gilou le 02-01-2004 à 02:32:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°600559
blackgodde​ss
vive le troll !
Posté le 02-01-2004 à 09:26:36  profilanswer
 

oui c'est vrai que c'est lourd les MFC ... par contre le wizard c'est bizard j'ai fait 2 install par defaut (vs.net 2002) et il était installé ...
 
merci pour les réponses :)


---------------
-( BlackGoddess )-
n°600560
blackgodde​ss
vive le troll !
Posté le 02-01-2004 à 09:27:39  profilanswer
 

sinon pour la compilation avec VC++ on dirait qu'il décore les noms comme il le fait pour son linker, ou comme il le fait quand on exporte des classes d'une dll par exemple ...


---------------
-( BlackGoddess )-
n°600578
gilou
Modérateur
Modzilla
Posté le 02-01-2004 à 10:32:23  profilanswer
 

blackgoddess a écrit :

oui c'est vrai que c'est lourd les MFC ... par contre le wizard c'est bizard j'ai fait 2 install par defaut (vs.net 2002) et il était installé ...
 
merci pour les réponses :)

Tu avais le wizard pour une appli console en VC++ .NET installé par defaut?? J'utilise VC++ .NET 2002 aussi pourtant. Installé lors de l'install de VS .NET Enterprise Architect.
Je me souviens plus de mes options d'install, alors ca peut venir de la. Mais si tu as le meme wizard que moi (installé a lal pogne donc), il genere automatiquement des fichiers  stdafx.h et stdafx.cpp, sauf si a la creation du projet tu penses a changer les options et cliquer sur la check-box pour projet vide (dans une page secondaire).
 
A+,


Message édité par gilou le 02-01-2004 à 10:34:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°600585
blackgodde​ss
vive le troll !
Posté le 02-01-2004 à 11:02:39  profilanswer
 

oui, c'est bien le même wizard (vs.net pro)


---------------
-( BlackGoddess )-
n°713371
TeLETUbIz
Posté le 01-05-2004 à 10:14:41  profilanswer
 

La méthode name renvoie un resultat non standart. Ca dépend de l'implémentation du compilo, et chaque compilo est libre de choisir le nom qu'il souhaite.
Raw_name est propre à certains compilo tel que VC et n'est pas standart. Il renvoie un nom codé en RAW.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  type_info : comment est-elle instanciée ?

 

Sujets relatifs
info bulles en htmlJAVA : connaissez vous ces outils (pas d'info sur le forum)
recherche d'idée de prti pour le bts info/gestionQuels sont les type d'arguments que l'on peut passer aux Store Proc?
[C] besoin important d'une info sur les nombres à virgule flottantepasser un tableau de type à 2 dimensions en paramètre ? comment faire
Comment récupérer le type de connexion d'un visiteur ?besoin d info sur les divers languages informatique appliqués au net
type d'appel et varagrtype contenu ds un vector
Plus de sujets relatifs à : type_info : comment est-elle instanciée ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR