Szablon funkcji
Z Wikipedii
Szablon funkcji lub funkcja szablonowa to w języku programowania C++ jeden z dwóch rodzajów szablonów dzięki któremu możliwe jest automatyczne generowanie nowych funkcji.
Spis treści |
[edytuj] Ogólny przykład
template< class Typ > // deklaracja funkcji szablonowej Typ dodaj( Typ par1 , Typ par2 ) { return par1 + par2; } int main() { int a = 5; int b = 8; int c = dodaj<int>( a , b ); float d = 3; float e = 4; float f = dodaj<float>( d , e ); return 0; }
- Powyżej znajduje się deklaracja funkcji szablonowej. W funkcji
int main()
znajdują się deklaracje 2 zmiennych typuint
. Następnie znajduje się wywołanie funkcjidodaj<int>
. W tym momencie podczas kompilacji, kompilator generuje nową funkcję korzystając z szablonu funkcji. W nawiasach trójkątnych został podany typ (w naszym przypadkuint
) który jest jedynym parametrem w deklaracji szablonu (template < class Typ >...
). Następuje zamiana w szablonie funkcji wszystkich miejsc gdzie występuje słowoTyp
na parametr aktualny jakim jestint
. Dzięki temu zostaje wygenerowana funkcjaint dodaj( int par1 , int par2 )
. Następnie widzimy podobną sytuację: zadeklarowane dwie zmienne typu float i wywołana funkcja odpowiedniododaj<float>
. Powoduje to wygenerowanie kolejnej przeciążonej funkcjidodaj<float>
o deklaracjifloat dodaj( float par1 , float par2 )
. - Nie jest konieczne określanie parametru aktualnego w wywołaniu funkcji szablonowej (zobacz: Właściwości).
[edytuj] Funkcja specjalizowana
[edytuj] Parametr formalny jako typ rezultatu
[edytuj] Właściwości
- W miejscach wywoływania funkcji szablonowej nie 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 )
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.