[ 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 ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wrobelek.opx.pl
  •