Szablon funkcji lub funkcja szablonowa – jeden z dwóch rodzajów szablonów w języku programowania C++, dzięki któremu możliwe jest automatyczne generowanie nowych funkcji.

Ogólny przykład template <class T> // deklaracja funkcji szablonowej T add (T par1, T par2) { return par1 + par2;

int main() { int a = 5; int b = 8; int c = add<int> (a, b); float d = 3; float e = 4; float f = add<float> (d, e); return 0;

Powyżej znajduje się deklaracja funkcji szablonowej. Funkcja int main() zawiera dwa wywołania funkcji add<int>. Podczas kompilacji generowane są dwie funkcje o tej nazwie, ale z różnymi sygnaturami. Parametry szablonu podawane są w nawiasach trójkątnych.

Funkcja specjalizowana Można jawnie podać specjalizację szablonu dla konkretnych typów. Deklaracja funkcji specjalizowanej musi znajdować się przed jej wywołaniem, gdyż w przeciwnym wypadku zostanie wykorzystana funkcja szablonowa. template <class T> T function (T a, T b) { return a + b;

void function (char c, char d) { cout << "\npodaj znak dla c: "; cin >> c; cout << "\npodaj znak dla d: "; cin >> d; cout << "\npodałeś znaki " << c << " i " << d << endl;

main() { int a2 = 4, b2 = 5; cout << function (a2, b2); char c2, d2; function (c2, d2); } Właściwości W miejscach wywoływania funkcji szablonowej nie zawsze jest konieczne określanie parametrów szablonu, ponieważ zostanie podjęta próba ich określenia korzystając z typów parametrów aktualnych wywołania. W związku z tym zamiast pisać dodaj<int>(a, b), zwykle wystarczy samo dodaj(a, b) ponieważ kompilator zna typy zmiennych a i b i na tej podstawie spróbuje dopasować wywołanie odpowiedniej funkcji (niekoniecznie szablonowej). Podmiana parametrów formalnych podczas generowania funkcji szablonowej nie jest naiwna tzn. słowo określające parametr formalny zostanie podmienione na parametr aktualny tylko tam, gdzie jest ono użyte w kontekście typu. W szczególności nie zostaną podmienione wystąpienia słowa Typ w nazwach zmiennych, łańcuchach itp.

Kategoria:C++