Szablon funkcji
Ten artykuł należy dopracować |
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 samododaj(a, b)
ponieważ kompilator zna typy zmiennycha
ib
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.