Explicitní specializace šablon tříd
Šablony třídy mohou být specializované pro určité typy nebo hodnoty argumentů šablon.Specializace umožňuje přizpůsobit kód šablony pro konkrétní typ argumentu nebo hodnotu.Bez specializace je stejný kód vygenerován pro každý použitý typ při vytváření instance šablony.Při použití určitých typů ve specializaci je použita definice specializace namísto původní definice šablony.Specializace má stejný název jako šablona, pro kterou je specializací.Specializace šablony se však může od původní šablony lišit mnoha způsoby.Například může mít různé datové členy a členské funkce.
Použijte specializaci pro přizpůsobení šablony pro určitý typ nebo hodnotu.Použijte částečnou specializaci, pokud šablona obsahuje více než jeden argument šablony a potřebujete specializovat pouze jeden z nich, nebo pokud chcete specializovat chování pro celou řadu typů, jako jsou všechny typy ukazatelů, odkazů nebo polí.Další informace naleznete v tématu Částečná specializace šablony třídy.
// 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
}
157 Char value: s
Viz také
Vytvoření instance šablony třídy
Částečná specializace šablon tříd (C++)