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

  FORUM HardWare.fr
  Programmation
  C++

  mot clef: typename

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mot clef: typename

n°470374
Taz
bisounours-codeur
Posté le 29-07-2003 à 00:41:07  profilanswer
 

voici le mot clef typename, que trop peu connaissent.
 
typename A
 
permet de spécifier au compilateur que A est un type (ce qui n'est pas toujours évident)
 
2 utilisations:
 
* en remplacement dans les paramètre de types dans les déclaration des templates

Code :
  1. template <class T> Foo;


peut s'ecrire avec préférence

Code :
  1. template <typename T> Foo;


retenez-le, histoire de ne pas être surpris  ;)  
 
* pour permettre au compilateur certaines résolutions de type. ceci concerne les templates: vous avez une classe template<typename T> et dans cette classe, vous souhaitez manipuler un sous-type (pas au sens de l'héritage, je retrouve pas le mot) de T, T::sous_type. Très bien, mais ça ne passera pas à la compilation, votre compilateur va perdre les pedales: il ne connait même pas T !!!
alors à vous de lui spécifer que T::sous_type est bien un type.
 
 
pour des raisons historiques, class est trop souvent utilisé, et pose souvent problème aux débutants puisque class à déjà un autre emploi (est ce que ça va marcher avec mes struct, mes int ??)
 
typename porte bien son nom, utilisez le.
 
petit exemples à tester
 

Code :
  1. template<typename T>
  2. class Foo
  3. {
  4. public:
  5.   typedef T data_type;
  6.  
  7.   typedef typename data_type::data_type nestded_data_type;
  8.   void go() const
  9.   {
  10.     nestded_data_type i;
  11.     // si vous n'avez pas fait de typedef
  12.     typename T::data_type j;
  13.     i = j;
  14.   }
  15. };
  16. class Bar
  17. {
  18. public:
  19.   typedef int data_type;
  20. };
  21. class Baz
  22. {
  23. public:
  24.   typedef float data_type;
  25. };
  26. #include <iostream>
  27. #include <typeinfo>
  28. using namespace std;
  29. int main()
  30. {
  31.   Foo<Bar>::nestded_data_type a;
  32.   Foo<Baz>::nestded_data_type b;
  33.   cout << typeid(a).name() << endl
  34.        << typeid(b).name() << endl;
  35.   Foo<Bar> r;
  36.   Foo<Baz> z;
  37.   r.go();
  38.   z.go();
  39. }


 
 
autre exemple  
 

Code :
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. struct Rose {};
  5. struct A { typedef Rose rose; };
  6. template<typename T>
  7. struct B : T { typedef typename T::rose foo; };
  8. template<typename T>
  9. void smell( T ) { cout << "awful" << endl; }
  10. void smell( Rose ) { cout << "sweet" << endl; }
  11. int main() {
  12. smell( A::rose() );
  13. smell( B<A>::foo() );
  14. }


Message édité par Taz le 19-04-2004 à 23:14:47
mood
Publicité
Posté le 29-07-2003 à 00:41:07  profilanswer
 

n°470380
jagstang
Pa Capona ಠ_ಠ
Posté le 29-07-2003 à 00:50:32  profilanswer
 

bien ceci


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°531805
Taz
bisounours-codeur
Posté le 05-10-2003 à 13:44:33  profilanswer
 

petites corrections, nouvel exemple. les explications sont toujours aussi approximatives, mais je crois que c'est la seule façon de parler aux débutants

n°532991
xiluoc
un pc pour les unirs ....
Posté le 07-10-2003 à 04:40:38  profilanswer
 

C est le problem que javais dans ma template, car j utilisai dans cette template une structure  lie au <T>
warning mais sa compile quand meme.
 


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
n°532998
Taz
bisounours-codeur
Posté le 07-10-2003 à 07:38:52  profilanswer
 

et ?

n°533003
xiluoc
un pc pour les unirs ....
Posté le 07-10-2003 à 08:06:00  profilanswer
 


et que javasi pas compris     [:dams86]


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
n°533004
Taz
bisounours-codeur
Posté le 07-10-2003 à 08:07:24  profilanswer
 

corrigé donc


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

  mot clef: typename

 

Sujets relatifs
mot clef : explicit[PHP MySQL] Clef primaire multiple ?(prob. réglé + infos législation)
2en1: mot-clef typeof() et coloration syntaxique pour le c++qqn pour me faire mes exos -> Kdo a la clef
[VB] indiquez la clef relative d un fichier relatif ?PostGres : peut-on créer une double clef primaire ?
Forum en PHP Qui peux me faire ça, remuneration a la clef[ MySQL ] - - - selectionner 16 derniers enregist. - sans clef prim.
[C++] A quoi sert le mot clef volatile ? 
Plus de sujets relatifs à : mot clef: typename


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