Udostępnij za pośrednictwem


Omówienie szablonów

Szablony, które są czasem nazywane sparametryzowana typy są mechanizmy generowania funkcje i klas, na podstawie parametrów typu.Korzystając z szablonów, można zaprojektować jedną klasę lub funkcji, która operuje na danych z wielu typów, zamiast tworzyć osobnej klasy dla każdego typu.

Uwagi

Na przykład aby utworzyć funkcję typesafe, która zwraca minimum dwa parametry bez korzystania z szablonów, można napisać zestaw funkcji zastąpionej like to:

// what_are_templates1.cpp
// compile with: /c
// min for ints
int min( int a, int b ) {
   return ( a < b ) ? a : b;
}

// min for longs
long min( long a, long b ) {
   return ( a < b ) ? a : b;
}

// min for chars
char min( char a, char b ) {
   return ( a < b ) ? a : b;
}

Korzystając z szablonów, można zmniejszyć tego duplikowania szablonu pojedynczą funkcję:

// what_are_templates2.cpp
// compile with: /c
template <class T> T min( T a, T b ) {
   return ( a < b ) ? a : b;
}

Szablony mogą znacznie zmniejszyć rozmiar kodu źródłowego oraz zwiększyć elastyczność kodu bez ograniczania bezpieczeństwa typu.

Istnieją dwa główne typy szablonów: szablony i szablony klasy.W poprzednim przykładzie min jest szablon funkcji.Szablon klasy jest klasa z parametrem, takich jak:

// what_are_templates3.cpp
template <class T> class A {
   T m_t;
   public:
      A(T t): m_t(t) {} 
      void f(T t);
};

int main() {
   A<int> a(10);
}

Szablony są zgłoszone i zdefiniowane nieco, podobnie jak inne funkcje i klas z zasadnicze różnice.Deklaracja szablonu nie w pełni definiowania funkcji lub klasy; Definiuje ona tylko syntaktycznych szkielet dla klasy lub funkcji.Klasa rzeczywiste lub funkcji jest tworzony z szablonu przez proces o nazwie wystąpienia.Do wystąpienia tworzone są określane poszczególnych klas lub funkcji, utworzony.Na przykład szablon klasy:

template <class T> struct A { . . . };

Służy do tworzenia wystąpienia klasy A<int>, A<char>, A<int*>, A<MyClass*>, i tak dalej.

Wystąpienia klas lub funkcji może odbywać się jawnie lub niejawnie.Jawne wystąpienia jest sposobem wywoływania w kodzie co wersji szablonu mają być generowane.Wystąpienia niejawna umożliwia szablony z myślą o uruchamianiu w razie potrzeby w punkcie, w którym są najpierw używane.

Szablony mogą być parametryczne również przez parametr wartość, w którego przypadku parametr szablonu jest zadeklarowany jako jak parametr do funkcji.Zmiennoprzecinkowe typy i klasy nie są dozwolone jako wartości parametrów.

// what_are_templates4.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

template <int i> class A {
   int array[i];
public:
   A() { memset(array, 0, i*sizeof(int)); }
};

int main() {
   A<10> a;
}

Typowy problem z szablonów jest, aby mogły być uniwersalny rozwiązania, co oznacza, że ten sam kod stosuje się do wszystkich typów.Jeżeli trzeba dostosować zachowanie szablon dla określonego typu, można użyć specjalizacji.Za pomocą jawnego specjalizacji, szablon może specjalistyczne dla określonego typu real nie typu rodzajowego.Szablon klasy może również być częściowo wyspecjalizowane, co jest przydatne, jeśli szablon z wielu parametrów typu i chcesz dostosować zachowanie w odniesieniu do niektórych, ale nie wszystkie parametry.Częściowe specjalizacji jest nadal rodzajowy i wymaga argumentów real szablonu do klasy skonkretyzowanym rzeczywistej produkcji.

Zobacz też

Inne zasoby

Szablony