Udostępnij za pośrednictwem


Funkcja szablonów

Określają rodziny powiązanych klas, które są na podstawie argumentów typu przekazanych do klasy na wystąpienia klasy.Funkcja szablony są podobne do klasy szablonów, ale definiuje rodziny funkcji.Z funkcji szablonów można określić zestaw funkcji, które są oparte na tym samym kodem, ale ustawy o różnych typów lub klasy.Następujący szablon funkcja zamienia dwa elementy:

// function_templates1.cpp
template< class T > void MySwap( T& a, T& b ) {
   T c(a); 
   a = b; 
   b = c;
}
int main() {
}

Ten kod zawiera definicję rodziny funkcje Zamień wartości argumentów.Z tego szablonu można wygenerować funkcje, które będą swap int i long typów, a także typy danych zdefiniowane przez użytkownika.MySwapJeśli kopia konstruktora klasy i operator przypisania poprawnie zdefiniowane, nawet będzie zamienić klas.

Ponadto szablonu funkcji uniemożliwi zamiana obiekty różnych typów, ponieważ kompilator rodzaje a i b parametry w czasie kompilacji.

Chociaż ta funkcja może być wykonana przez funkcję nontemplated, za pomocą wskaźników typu void, wersja szablonu jest typesafe.Należy wziąć pod uwagę następujące połączenia:

int j = 10;
int k = 18;
CString Hello = "Hello, Windows!";
MySwap( j, k );          //OK
MySwap( j, Hello );      //error

Drugi MySwap wywołania wyzwala błąd w czasie kompilacji, ponieważ kompilator nie może wygenerować MySwap funkcji z parametrami różnych typów.Jeśli użyto wskaźników typu void, zarówno wywołania funkcji będzie kompilować poprawnie, ale funkcja nie będzie działać prawidłowo w czasie wykonywania.

Dopuszcza się wyraźnego określenia argumentów szablonu szablon funkcji.Na przykład:

// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
   f<char>(j);   // Generate the specialization f(char).
   // If not explicitly specified, f(int) would be deduced.
}

Gdy wyraźnie określono argument szablonu, normalnej konwersje niejawne są wykonywane Aby przekonwertować argumentu funkcji typu odpowiednich parametrów szablonu funkcji.W powyższym przykładzie, kompilator będzie konwersji (char j) aby wpisać int.

Zobacz też

Informacje

Funkcja szablonu wystąpienia

Jawne wystąpienia

Jawne specjalizacji funkcji szablonów

Inne zasoby

Szablony