Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Vytváření instance šablony třídy

Částečné specializace šablony třídy (C++)