Klas opartych na szablonie
W tym artykule wyjaśniono klas kolekcja opartych na szablonie typ palety w MFC wersja 3.0 i nowsze.Za pomocą tych szablonów do tworzenia bezpiecznego typu kolekcji jest wygodniejsze i pomaga zapewnić bezpieczeństwo typu bardziej efektywnie niż korzystanie z klas kolekcji nie są oparte na szablonach.
MFC powoduje wstępne definiowanie dwie kategorie kolekcje oparte na szablonach:
Proste tablicy, listy i mapę klas
CArray, CList, CMap
Tablice, listy i mapy wskaźniki maszynowy
CTypedPtrArray, CTypedPtrList, CTypedPtrMap
Klasy zbioru proste są uzyskiwane z klasy CObject, więc dziedziczą serializacji, tworzenie dynamicznych i innych właściwości CObject.Klasy zbioru maszynowy wskaźnik wymagać określenia klasy pochodzić od — który musi być jedną z wstępnie przez MFC, takie jak kolekcje wskaźnik nontemplate CPtrList lub CPtrArray.Nowej klasy kolekcji dziedziczy z klasy podstawowej określonej i zhermetyzowany wywołań członków klasy podstawowej w funkcji elementów członkowskich nowej klasy są używane do wymuszania typu bezpieczeństwa.
Aby uzyskać więcej informacji na temat szablonów języka C++, zobacz szablonów w Skorowidz języka C++.
Za pomocą prostego tablicy, listy i szablony mapę
Aby użyć szablonów kolekcji proste, trzeba wiedzieć, jakiego rodzaju dane można przechowywać w kolekcjach i jakich parametrów użyć w deklaracjach z kolekcji.
Tablica proste i sposób użycia listy
Tablica proste i lista klas CArray i CList, podjąć dwa parametry: typu i ARG_TYPE.Klasy te można przechowywać dowolny typ danych określić w typu parametru:
Typy danych języka C++ podstawowych, takich jak int, char, i pływaka
Struktury C++ i klasy
Inne typy zdefiniowane przez użytkownika
Dla wygody i efektywności, można użyć ARG_TYPE parametr, aby określić typ argumenty funkcji.Zazwyczaj określić ARG_TYPE jako odwołanie do typu, nazwane w typu parametru.Na przykład:
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
Pierwszy przykład deklaruje zbiorze array, myArray, który zawiera ints.Drugi przykład deklaruje kolekcji listy, myList, który przechowuje CPerson obiektów.Niektóre funkcje składowe klasy kolekcji podjąć argumentów, których typ jest określony przez ARG_TYPE parametr szablonu.Na przykład Dodaj funkcji składowej klasy CArray ma ARG_TYPE argumentu:
CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);
Prosty sposób użycia mapy
Klasa mapę proste CMap, cztery parametry: klucz, ARG_KEY, wartość, i ARG_VALUE.Jak klas array i lista klas mapy można przechowywać dowolny typ danych.W przeciwieństwie do tablic i list, które indeksu i zamówić one magazyn danych, mapy skojarzyć klucze i wartości: dostęp wartości przechowywanej na mapie, określając wartość skojarzony klucz.Klucz parametr określa typ danych klucze używane do dostępu do danych przechowywanych na mapie.Jeśli typ klucz struktury lub klasy, ARG_KEY parametr jest zazwyczaj odwołanie do typu, określonego w klucz.Wartość parametr określa typ elementy przechowywane w mapie.Jeśli typ ARG_VALUE struktury lub klasy, ARG_VALUE parametr jest zazwyczaj odwołanie do typu, określonego w wartość.Na przykład:
CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;
Pierwszy przykład sklepy MY_STRUCT wartości, uzyskuje dostęp do nich przez int klucze i zwraca dostęp do MY_STRUCT elementów przez odniesienie.Drugi przykład sklepy CPerson wartości, uzyskuje dostęp do nich przez CString klawiszy i zwraca odwołania do elementów dostęp.W tym przykładzie może reprezentować prosty książki adresowej programu, w którym można wyszukać osoby według nazwiska.
Ponieważ klucz parametr jest typu CString i KEY_TYPE parametr jest typu LPCSTR, klucze są przechowywane w mapie jako elementy typu CString , ale do których odwołuje się funkcje takie jak SetAt za pomocą wskaźników typu LPCSTR.Na przykład:
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);
Przy użyciu wskaźnika wpisany kolekcji szablonów
Aby użyć szablonów kolekcji wpisany wskaźnik, trzeba wiedzieć, jakiego rodzaju dane można przechowywać w kolekcjach i jakich parametrów użyć w deklaracjach z kolekcji.
Wskaźnik wpisany tablicy i sposób użycia listy
Wskaźnik wpisany tablicy i lista klas CTypedPtrArray i CTypedPtrList, podjąć dwa parametry: BASE_CLASS i typu.Klasy te można przechowywać dowolny typ danych określić w typu parametru.Pochodzą one z jednej z klas kolekcji nontemplate, które przechowuje wskaźników; określenie tej klasy podstawowej w BASE_CLASS.Dla tablic, użyj CObArray lub CPtrArray.Dla listy, użyj CObList lub CPtrList.
W efekcie powiedzieć przy deklarowaniu kolekcję na podstawie CObList, nowa klasa dziedziczy nie tylko członków swojej klasy bazowej, ale również deklaruje liczba dodatkowych członków typu bezpiecznej funkcji i operatorów, które pomagają typu bezpieczeństwa przez encapsulating wywołań członków klasy podstawowej.Te encapsulations zarządzanie wszystkie niezbędne typ konwersji.Na przykład:
CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;
Pierwszy przykład deklaruje tablicy wskaźnik wpisane, myArray, pochodzący z CObArray.Tablica przechowuje i zwraca wskaźniki do CPerson obiektów (gdzie CPerson jest Klasa pochodna od CObject).Można wywołać dowolną CObArray Członkowskich funkcji lub użytkownik może wywołać nowy typ bezpiecznej GetAt i ElementAt funkcje lub Użyj bezpiecznego typu operatora.
Drugi przykład deklaruje listy wskaźnik wpisane, myList, pochodzący z CPtrList.Na liście są przechowywane i zwraca wskaźniki do MY_STRUCT obiektów.Na podstawie klasy CPtrList jest używana do przechowywania wskaźniki do obiektów, które nie pochodzą z CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.
Sposób użycia mapy wpisany wskaźnik
Klasa mapę wpisany wskaźnik CTypedPtrMap, przyjmuje trzy parametry: BASE_CLASS, klucz, i wartość.BASE_CLASS Parametr określa klasę, z którego pochodzą nowej klasy: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToObi tak dalej.KLUCZ jest analogiczny do klucz w CMap: Określa typ klucza używanego dla wyszukiwania.WARTOŚĆ jest analogiczny do wartość w CMap: Określa typ obiektu, przechowywane w mapie.Na przykład:
CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;
Pierwszy przykład jest oparty na mapę CMapPtrToPtr — używa CString klawiszy mapowane do wskaźników do MY_STRUCT.Można wyszukać wskaźnik przechowywanych przez wywołanie typu palety Lookup funkcji składowej.Można użyć operatora do wyszukiwania przechowywanych wskaźnik i dodać go Jeżeli nie znaleziono.I iteracyjne mapę, przy użyciu bezpiecznego typu GetNextAssoc funkcji.Można również wywołać innego członka funkcje klasy CMapPtrToPtr.
Drugi przykład jest oparty na mapę CMapStringToOb — korzysta z kluczy ciąg mapowane do przechowywanych wskaźniki do CMyObject obiektów.Można użyć tych samych elementów członkowskich typu bezpiecznej opisanego w poprzednim ustępie, lub może wywołać członkowie klasy CMapStringToOb.
[!UWAGA]
Jeśli określisz klasy lub struct wpisz wartość parametr, zamiast wskaźnika lub odwołanie do typu, klasy lub struktury musi mieć konstruktora kopii.
Aby uzyskać więcej informacji, zobacz jak kolekcja typ palety.