Partager via


Spécialisation explicite des modèles de classe

Les modèles de classe peuvent être spécialisés pour des types spécifiques ou les valeurs des arguments template.La spécialisation permet au code du modèle à personnaliser pour un type d'argument ou une valeur spécifique.Sans spécialisation, même code est généré pour chaque type utilisé dans une instanciation du modèle.Dans une spécialisation, lorsque les types spécifiques sont utilisés, la définition de la spécialisation est utilisée au lieu de la définition du modèle d'origine.Une spécialisation a le même nom que le modèle dont il s'agit d'une spécialisation.Toutefois, une spécialisation de modèle peut être différente de plusieurs modes du modèle d'origine.par exemple, il peut avoir différentes données membres et fonctions membres.

spécialisation d'utilisation pour personnaliser un modèle pour un type ou une valeur spécifique.Utilisez la spécialisation partielle lorsque le modèle possède plusieurs arguments template et vous devez uniquement spécialiser l'une d'entre elles, ou lorsque vous souhaitez spécialiser le comportement pour un jeu complet de types, tels que tous les types pointeur, types référence, ou types tableau.Pour plus d'informations, consultez Spécialisation partielle les modèles de classe.

Exemple

// explicit_specialization1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

// Template class declaration and definition
template <class T> class Formatter
{
   T* m_t;
public:
   Formatter(T* t) : m_t(t) { }
   void print()
   {
      cout << *m_t << endl;
   }
};

// Specialization of template class for type char*
template<> class Formatter<char*>
{
   char** m_t;
public:
   Formatter(char** t) : m_t(t) { }
   void print()
   {
      cout << "Char value: " << **m_t << endl;
   }
};

int main()
{
   int i = 157;
   // Use the generic template with int as the argument.
   Formatter<int>* formatter1 = new Formatter<int>(&i);

   char str[10] = "string1";
   char* str1 = str;
   // Use the specialized template.
   Formatter<char*>* formatter2 = new Formatter<char*>(&str1);

   formatter1->print();
   formatter2->print();
}
  

Voir aussi

Référence

Instanciation du modèle de classe

Spécialisation partielle des modèles de classe (C++)