Explicitní specializace šablony třídy
Třída šablony můžete specializované pro určité typy a hodnoty argumentů šablony.Specializace umožňuje přizpůsobit pro určitý argument typ nebo hodnotu kódu šablony.Bez specializace stejný kód generován pro každý typ při vytváření instance šablony.Při použití určitých typů v specializace, používá definici specializace namísto původní definice šablony.Specializace má stejný název jako šablony, které je specializace.Specializace šablony lze však různé způsoby z původní šablony.Například mohou mít různé datové členy a funkce členů.
Pomocí vlastní šablony pro konkrétní typ nebo hodnota specializace.Pokud šablona obsahuje více než jeden argument šablony a potřebujete pouze jeden z nich specialize nebo chcete specialize chování pro celou sadu typů, například typy ukazatele, referenční typy nebo typy polí, použijte částečné specializace.Další informace naleznete v tématu Částečné specializace šablony třídy.
Příklad
// 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();
}