Klasy oparte na szablonach
Ten artykuł wyjaśnia kolekcja opartych na szablonie typ palety klas MFC w wersji 3.0 lub nowszej.Za pomocą tych szablonów do tworzenia kolekcji typu palety jest wygodniejsze i pomaga zapewnić bezpieczeństwo typów bardziej efektywnie niż użycie w klasach kolekcji nie oparte na szablonach.
MFC Określa, w jakim dwie kategorie kolekcje oparte na szablonach:
Prostym obiektem array, list i mapę klas
CArray, CList, CMap
Tablicach, listy i mapy wpisywanych wskaźniki
CTypedPtrArray, CTypedPtrList, CTypedPtrMap
W klasach kolekcji proste są uzyskiwane z klasy CObject, więc dziedziczą one serializacji, dynamiczne tworzenie i inne właściwości CObject.W klasach kolekcji wpisywanych wskaźnik wymagać określenia klasa pochodzi od — który musi mieć jedną z wstępnie przez MFC, takich jak kolekcje wskaźnik nontemplate CPtrList lub CPtrArray.Nowej klasy kolekcji dziedziczy z klasy bazowej określonej, a funkcje składowe nowej klasy są używane do wymuszania bezpieczeństwo typów zhermetyzowane wywołań członków klasy podstawowej.
Aby uzyskać więcej informacji dotyczących szablonów języka C++, zobacz Szablony w Skorowidz języka C++.
Za pomocą prostych tablicy, listy i szablony mapę
Aby użyć szablonów kolekcji proste, musisz wiedzieć, jakiego rodzaju dane można przechowywać w kolekcjach i jakich parametrów użyć w swojej deklaracji kolekcji.
Proste Array i użycie listy
Proste array i lista klas, CArray i CList, mają po dwa parametry: typu i ARG_TYPE.Tych klas można przechowywać dowolny typ danych, którą określa się w typu parametr:
Typy danych języka C++ podstawowych, takich jak int, char, i pływaka
Konstrukcje języka C++ i klasy
Inne typy zdefiniowane przez użytkownika
Dla wygody i efektywności, można użyć ARG_TYPE parametru, aby określić typ argumentów funkcji.Zazwyczaj określić ARG_TYPE jako odwołanie do typu o nazwie w typu parametru.Na przykład:
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
Pierwszy przykład deklaruje zbiorze tablicy, myArray, który zawiera ints.Drugi przykład deklaruje kolekcji list, myList, na którym znajduje się CPerson obiektów.Niektórych funkcji elementów członkowskich kolekcja klas wziąć argumenty, którego 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);
Użycie prostego mapy
Klasa proste mapa CMap, ma cztery parametry: klucz, ARG_KEY, wartość, i ARG_VALUE.Jak klas array i listy mapę klas można przechowywać dowolny typ danych.W przeciwieństwie do tablic i list, które indeksu i zamówić one magazyn danych, mapy skojarzyć kluczy i wartości: dostępu wartość przechowywane w mapie, określając wartość skojarzonego z nim klucza.Klucz parametr określa typ danych klucze używane do dostępu do danych przechowywanych na mapie.Jeśli typ klucz jest struktury lub klasy, ARG_KEY parametr jest zazwyczaj odwołanie do typu określonego w klucz.Wartość parametr określa typ elementów zapisanych w planie.Jeśli typ ARG_VALUE jest 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, a następnie zwraca odwołania do elementów używanych.W tym przykładzie może reprezentować prosty książki adresowej programu, w którym można wyszukiwać osoby według nazwiska.
Ponieważ klucz parametr jest typu CString i KEY_TYPE parametr jest typu LPCSTR, klucze są przechowywane na mapie jako elementy typu CString , ale istnieją odwołania w funkcjach, takich 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);
Korzystanie z szablonów kolekcji wpisane wskaźnika
Aby użyć szablonów kolekcji wpisane wskaźnika, należy wiedzieć, jakiego rodzaju dane można przechowywać w kolekcjach i jakich parametrów użyć w swojej deklaracji kolekcji.
Wskaźnik wpisane Array i użycie listy
Wskaźnik wpisane array i lista klas, CTypedPtrArray i CTypedPtrList, mają po dwa parametry: BASE_CLASS i typu.Tych klas można przechowywać dowolny typ danych, którą określa się w typu parametru.Pochodzą one z jednej z klas kolekcji nontemplate, które przechowuje wskaźniki; określenie tej klasy podstawowej w BASE_CLASS.Dla tablic, użyj CObArray lub CPtrArray.W przypadku list, użyj CObList lub CPtrList.
W efekcie przy deklarowaniu zbiór na podstawie powiedzieć CObList, Nowa klasa dziedziczy nie tylko członków swojej klasy bazowej, ale to oświadcza również szereg dodatkowych członków typ palety, funkcji i operatorów, które pomagają zapewnić bezpieczeństwo typów hermetyzując wywołań członków klasy podstawowej.Te obudowy zarządzać 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ące z CObArray.Przechowuje tablicy i zwraca wskaźniki do CPerson obiektów (gdzie CPerson jest klasa pochodna od CObject).Możesz zadzwonić do jednego CObArray funkcji członka, lub może wywołać nowy typ palety GetAt i ElementAt funkcje lub użyć typu palety operatora.
Drugi przykład deklaruje listy wskaźnik wpisane, myList, pochodzące z CPtrList.Listy 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 nie pochodzi od CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.
Mapa wpisane wskaźnik użycia
Klasa mapę wpisane wskaźnik CTypedPtrMap, przyjmuje trzy parametry: BASE_CLASS, klucz, i wartość.BASE_CLASS Parametr określa klasę, z którego pochodzi nowa klasa: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb, i tak dalej.KLUCZ jest analogiczny do klucz w CMap: Określa typ klucz używany do wyszukiwania.WARTOŚĆ jest analogiczny do wartość w CMap: Określa typ obiektu przechowywanego w planie.Na przykład:
CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;
Pierwszy przykład jest mapa na podstawie CMapPtrToPtr — używa CString kluczy mapowane do wskaźników do MY_STRUCT.Można wyszukiwać wskaźnik przechowywanych przez wywołanie typu palety Lookup funkcji składowej.Można użyć operator, aby wyszukać wskaźnik przechowywanych i dodać go, jeśli nie znaleziono. I możliwe jest iteracyjne mapy przy użyciu typu palety GetNextAssoc funkcji.Można również wywołać innego członka funkcje klasy CMapPtrToPtr.
Drugi przykład jest mapa na podstawie CMapStringToOb — używa kluczy ciąg mapowane do przechowywanej wskaźniki do CMyObject obiektów.Można użyć tych samych członków typ palety opisanych w poprzednim akapicie, lub może wywołać członkowie klasy CMapStringToOb.
[!UWAGA]
Jeśli określisz klasy lub struct wpisz wartość parametru, zamiast wskaźnika lub odwołanie do typu, klasy lub struktury musi mieć konstruktora kopii.
Aby uzyskać więcej informacji, zobacz jak zrobić Kolekcja typ palety.