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

  FORUM HardWare.fr
  Programmation
  C++

  Spécialisation template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Spécialisation template

n°1890635
geo la fri​te
Posté le 02-06-2009 à 23:25:37  profilanswer
 

Bonjour,
 
Le code suivant est extrait de boost (boost/exception/exception.hpp).
 

Code :
  1. template <class Tag,class T>
  2.     class error_info;
  3.     typedef error_info<struct tag_throw_function,char const *> throw_function;
  4.     typedef error_info<struct tag_throw_file,char const *> throw_file;
  5.     typedef error_info<struct tag_throw_line,int> throw_line;
  6.     template <>
  7.     class
  8.     error_info<tag_throw_function,char const *>
  9.         {
  10.         public:
  11.         typedef char const * value_type;
  12.         value_type v_;
  13.         explicit
  14.         error_info( value_type v ):
  15.             v_(v)
  16.             {
  17.             }
  18.         };
  19.     template <>
  20.     class
  21.     error_info<tag_throw_file,char const *>
  22.         {
  23.         public:
  24.         typedef char const * value_type;
  25.         value_type v_;
  26.         explicit
  27.         error_info( value_type v ):
  28.             v_(v)
  29.             {
  30.             }
  31.         };
  32.     template <>
  33.     class
  34.     error_info<tag_throw_line,int>
  35.         {
  36.         public:
  37.         typedef int value_type;
  38.         value_type v_;
  39.         explicit
  40.         error_info( value_type v ):
  41.             v_(v)
  42.             {
  43.             }
  44.         };


 
Je me pose deux questions :
 

  • Pourquoi utiliser le mot clef struct pour les lignes typedef error_info< struct ... ?
  • Il me semble que template <> ... est utilisé pour faire une spécialisation totale du template mais visiblement un seul des deux types est spécifié. Est-ce licite d'écrire un truc comme ça ?


Merci d'avance pour vos réponses.

mood
Publicité
Posté le 02-06-2009 à 23:25:37  profilanswer
 

n°1890655
Joel F
Real men use unique_ptr
Posté le 03-06-2009 à 07:08:30  profilanswer
 

1/ structure localisée sans existence hors du typedef
2/ moi je vois 2 types par specialisation ....

n°1890677
geo la fri​te
Posté le 03-06-2009 à 08:55:05  profilanswer
 

Joel F a écrit :


2/ moi je vois 2 types par specialisation ....


Dans le cas de la première spécialisation le deuxième type est un const char*, mais  tag_throw_function c'est quoi ?

n°1890683
frenchtouc​co
Posté le 03-06-2009 à 09:11:33  profilanswer
 

c'est une struct vide ça permet juste de faire de 'la surcharge' et d'aller dans la spécialisation de template adéquate. c'est une astuce quoi en somme!


Message édité par frenchtoucco le 03-06-2009 à 09:17:17

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1890749
Joel F
Real men use unique_ptr
Posté le 03-06-2009 à 11:24:16  profilanswer
 

geo la frite a écrit :


Dans le cas de la première spécialisation le deuxième type est un const char*, mais  tag_throw_function c'est quoi ?


 
la struct définie juste au dessus


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

  Spécialisation template

 

Sujets relatifs
SVP, Comment inserer une template flash sur dreamweaverXSLT template
template[C# 2] Héritage et spécialisation de méthodes template
Specialisation de templateerreur de spécialisation d'un template ...
Specialisation de template et erreur de link... [presque resolu]spécialisation de fonctions membres (template) d'une classe template
Probleme spécialisation de templateSpécialisation template & Pétage de plomb
Plus de sujets relatifs à : Spécialisation template


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