[ Pobierz całość w formacie PDF ]
danego zachowania na skutek utworzenia instancji szablonu dla pewnego typu. TworzÄ…c
specjalizacj¹ szablonu klasy musimy pami¹tać o utworzeniu specjalizacji wszystkich
jego funkcji składowych. Możliwe jest stworzenie specjalizacji pojedynczej funkcji
składowej, ale uniemożliwia ono stworzenie specjalizacji całej klasy.
Jawna specjalizacja wymaga dodania słowa przed deklaracją klasy oraz ty-
pu szablonu po nazwie klasy:
Definicja każdej funkcji skÅ‚adowej musi rozpoczynać si¹ sÅ‚owem , a typ
musi zostać zastąpiony określonym typem szablonu:
A oto kompletny przykład specjalizacji szablonu klasy dla typu :
Rozdział 7. Szablony 409
Specjalizacja szablonu dla Å‚aÅ„cuchów zastÄ…piÅ‚a używany wewn¹trznie wektor kolejkÄ….
Nie jest to jakaś przełomowa zmiana, ale ilustruje ona możliwość zupełnie innej imple-
mentacji szablonu klasy dla określonego typu.
Zakresy wartości numerycznych zdefiniowane w bibliotece standardowej stanowią ko-
lejny przykład zastosowania specjalizacji szablonów (patrz podrozdział 9.1.4).
Możliwe jest też tworzenie częściowych specjalizacji szablonów. Na przykład dla sza-
blonu klasy:
możemy utworzyć nast¹pujÄ…cÄ… specjalizacj¹ cz¹Å›ciowÄ…:
410 C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
Powyższych szablonów używamy w nast¹pujÄ…cy sposób:
JeÅ›li do deklaracji pasuje kilka specjalizacji cz¹Å›ciowych, nie jest ona jednoznaczna:
Druga z powyższych deklaracji może zostać rozstrzygni¹ta, jeÅ›li zdefiniowana zostanie
specjalizacja dla wskazników tego samego typu:
n nu
W przypadku szablonów klas możemy zdefiniować domyślne wartości parametrów (nie
jest to możliwe dla szablonów funkcji). Domyślne wartości parametrów szablonu mogą
odnosić si¹ do pozostaÅ‚ych jego parametrów.
Na przykład możemy sparametryzować kontener używany do zarządzania elementami
stosu i zdefiniować wektor jako domyślny typ kontenera:
Rozdział 7. Szablony 411
Tak zdefiniowanego stosu możemy używać w ten sam sposób, co poprzednich wersji
szablonu, ale z dodatkową możliwością określenia innego typu kontenera elementów:
412 C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
Za pomocÄ… deklaracji:
utworzony zostaÅ‚ stos wartoÅ›ci zmiennoprzecinkowych, wykorzystujÄ…cy kolejk¹ jako
wewn¹trzny kontener elementów.
u n
Za pomocą szablonów klasy mogą być implementowane dla typów, które nie
zostały jeszcze zdefiniowane.
Zastosowanie szablonów klas umożliwia parametryzacj¹ kontenerów ze wzgl¹du
na typ ich elementów.
W przypadku użycia szablonu klasy generowany jest kod tylko dla tych funkcji
składowych, które rzeczywiście są wywoływane.
Implementacja szablonów klas może być wyspecjalizowana dla pewnych typów.
Możliwa jest także cz¹Å›ciowa specjalizacja szablonu klasy.
Parametry szablonów klas mogą posiadać wartości domyślne.
lnn n
Parametry szablonów nie muszą być typami. Mogą być elementarnymi wartościami,
podobnie jak parametry funkcji. W ten sposób możemy zdefiniować grup¹ funkcji lub
klas sparametryzowanÄ… wzgl¹dem pewnych wartoÅ›ci.
n nn h n
W poniższym przykÅ‚adzie zdefiniujemy kolejnÄ… wersj¹ szablonu stosu, która b¹dzie za-
rządzać elementami stosu za pomocą zwykłej tablicy o stałym rozmiarze. Unikniemy
w ten sposób kosztów zwiÄ…zanych z dynamicznym zarzÄ…dzaniem pami¹ciÄ….
Rozdział 7. Szablony 413
Deklaracja tej wersji szablonu przedstawia si¹ nast¹pujÄ…co:
414 C++. Programowanie zorientowane obiektowo. Vademecum profesjonalisty
Drugi z parametrów szablonu stosu, , określa rozmiar stosu. Używany jest nie
tylko w celu zadeklarowania odpowiedniej wielkoÅ›ci tablicy, ale także przez funkcj¹
w celu sprawdzenia, czy stos jest pełen.
Korzystając z tej wersji szablonu stosu musimy wyspecyfikować typ elementów stosu
oraz jego wielkość:
Warto zauważyć, że w powyższym przykładzie stosy i posiadają
różne typy i nie mogą być przypisywane bądz używane jeden zamiast drugiego.
Parametry szablonu mogą posiadać wartości domyślne:
Powyższy przykład nie jest zbyt użyteczny, Domyślne wartości powinny być zgodne
z intuicyjnym oczekiwaniem użytkownika. Ani typ , ani wielkość stosu równa 100
nie są intuicyjne. W takim przypadku lepiej pozostawić specyfikacje wartości parame-
trów programiście aplikacji.
Rozdział 7. Szablony 415
n n n
Z użyciem innych parametrów szablonów związane są pewne ograniczenia. Parametry
szablonów mogą być, oprócz typów, stałymi wyrażeniami całkowitymi, adresami obiek-
tów lub funkcji, które sÄ… globalnie dost¹pne w programie.
Liczby zmiennoprzecinkowe i obiekty, których typem są klasy, nie mogą być parame-
trami szablonów klas:
Literały znakowe w roli parametrów szablonów również mogą być przyczyną proble-
mów:
LiteraÅ‚y znakowe nie sÄ… bowiem globalnymi obiektami dost¹pnymi w dowolnym punk-
cie programu. Jeśli literał zostanie zdefiniowany w dwóch różnych modułach,
to powstaną dwa różne łańcuchy.
[ Pobierz całość w formacie PDF ]