Jawna specjalizacja szablonów klas
Klasa szablonów można specyficznymi dla określonego typu lub wartości argumentów szablonu.Specjalizacji umożliwia kodu szablonu można dostosować dla określonego argumentu typu lub wartości.Bez specjalizacji ten sam kod został wygenerowany dla każdego typu używany podczas tworzenia wystąpienia szablonu.W specjalizacji gdy określone typy są używane, definicja specjalizacji jest używana zamiast oryginalnej definicji szablonu.Specjalizacji ma taką samą nazwę jak szablon, który jest specjalizacji.Jednak specjalizacji szablonu może różnić się na wiele sposobów na podstawie oryginalnego szablonu.Na przykład może mieć różne danych elementów członkowskich i funkcji elementów członkowskich.
Aby dostosować szablon dla określonego typu lub wartości, należy użyć specjalizacji.Częściowe specjalizacji należy używać, gdy szablon ma więcej niż jeden argument szablon i należy dostosować ją jednego z nich, lub chcesz dostosować ją zachowania w przypadku cały zestaw typów, takich jak typy wskaźnik, typu odwołania lub tablic.Aby uzyskać więcej informacji, zobacz Częściowa specjalizacja szablonów klas.
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(&i);
char str[10] = "string1";
char* str1 = str;
// Use the specialized template.
Formatter<char*> formatter2(&str1);
formatter1.print(); // 157
formatter2.print(); // Char value : s
}