Udostępnij za pośrednictwem


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.

f728cbk3.collapse_all(pl-pl,VS.110).gifTablica 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);

f728cbk3.collapse_all(pl-pl,VS.110).gifProsty 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.

f728cbk3.collapse_all(pl-pl,VS.110).gifWskaź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.

f728cbk3.collapse_all(pl-pl,VS.110).gifSposó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.

Zobacz też

Koncepcje

Kolekcje