Specializzazione esplicita di un template di classe

I modelli della classe possono essere specializzati per tipi specifici o ai valori degli argomenti.La specializzazione consente al codice del modello sia personalizzata per un tipo di argomento o un valore specifico.Senza specializzazione, lo stesso codice viene generato per ogni tipo utilizzato in una creazione di istanze del modello.In una specializzazione, quando i tipi specifici vengono utilizzati, la definizione per la specializzazione viene utilizzata al posto della definizione di modello originale.Una specializzazione con lo stesso nome del modello che è una specializzazione.Tuttavia, una specializzazione del template può essere diverso in molti modi dal modello originale.Ad esempio, può disporre delle funzioni membro e i membri dati diversi.

utilizzare la specializzazione per personalizzare un modello per un tipo specifico o un valore.Utilizzare la specializzazione parziale quando il modello dispone di più di un argomento di modello ed è necessario solo specializzare una di esse, o quando si desidera specializzare il comportamento di un intero insieme di tipi, analogamente a tutti i tipi di puntatore, tipi di riferimento, o tipi di matrice.Per ulteriori informazioni, vedere Specializzazione parziale dei modelli di classe.

Esempio

// 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();
}
  

Vedere anche

Riferimenti

Creazione di un'istanza del template di classe

Specializzazione parziale dei modelli di classe (C++)