Udostępnij za pośrednictwem


Jawne specjalizacji klasy szablonów

Szablony klasy można specjalistyczne dla określonych typów lub wartości argumentów szablonu.Specjalizacji umożliwia kod szablonu do dostosowania szczególnych argumentu typu lub wartości.Bez specjalizacji ten sam kod jest generowany dla każdego rodzaju używanych w tworzeniu wystąpienia szablonu.W specjalizacji gdy używane są określone typy definicji dla specjalizacji jest używana zamiast definicji oryginalnego szablonu.Specjalizacji ma taką samą nazwę jak szablon, który jest specjalizacji.Jednakże specjalizacji szablonu mogą być różne na wiele sposobów na podstawie oryginalnego szablonu.Na przykład można mieć członków różnych danych i funkcji elementów członkowskich.

Dostosowywanie szablonu dla określonego typu lub wartości za pomocą specjalizacji.Częściowe specjalizacji należy używać, gdy szablon ma więcej niż jeden argument szablonu i potrzebna jest jedna z nich specjalizują lub specialize zachowanie dla całego zestawu typów, takich jak typy wskaźnik, typy odwołań lub typów tablicowych.Aby uzyskać więcej informacji, zobacz Częściowego specjalizacji szablony klasy.

Przykład

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

Zobacz też

Informacje

Wystąpienia szablonu klasy

Częściowe specjalizacji klasy szablonów (C++)