Sdílet prostřednictvím


Třídy založené na šablonách

Tento článek vysvětluje zajišťující bezpečnost typů šablonových kolekce třídy v MFC verze 3.0 a novější.Pomocí těchto šablon k vytvoření kolekce zajišťující bezpečnost typů je pohodlnější a pomáhá efektivněji než pomocí kolekce tříd, které nejsou založeny na šablonách poskytují typovou bezpečnost.

Knihovna MFC predefines dvě kategorie kolekce založené na šablonách:

  • Jednoduché pole, seznam a mapa třídy

    CArray, CList, CMap

  • Matice, seznamy a mapy typových ukazatelů

    CTypedPtrArray, CTypedPtrList, CTypedPtrMap

Jednoduchá kolekce třídy jsou odvozeny ze třídy CObject, aby zdědily serializace, dynamických a další vlastnosti CObject.Třídy kolekcí typu ukazatele vyžadují zadání jsou odvozeny z třídy, která musí být předdefinovány knihovny MFC, jako jsou například kolekce ukazatel nontemplate CPtrList nebo CPtrArray.Nové kolekce třídy dědí ze základní třídy zadané a novou třídu členské funkce použít zapouzdřený volání členy základní třídy zajistit bezpečnost typů.

Další informace o šablonách jazyka C++ naleznete v tématu šablony v Referenční příručka jazyka C++.

Pomocí jednoduché pole, seznam a mapa šablony

Použití jednoduchého kolekce šablon, musíte vědět, jaký druh dat lze uložit v těchto kolekcích a jaké parametry se mají použít v deklaracích kolekce.

Jednoduché pole a seznam použití

Jednoduché pole a seznam tříd CArray a CList, dva parametry: typu a ARG_TYPE.Těchto tříd lze ukládat libovolný typ dat, který jste zadali v typu parametr:

  • Základní C++ datové typy, jako int, char, a float

  • Struktury jazyka C++ a třídy

  • Další typy, které definují

Pro pohodlí a účinnost, lze použít ARG_TYPE parametr určuje typ argumentů funkce.Obvykle zadat ARG_TYPE jako odkaz na typ s názvem v typu parametr.Příklad:

CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;

V prvním příkladu deklaruje kolekci array myArray, který obsahuje ints.V druhém příkladu deklaruje seznamu kolekce myList, který ukládá CPerson objekty.Některé členské funkce tříd kolekcí přijmout argumenty, jejichž typ je určen ARG_TYPE parametr šablony.Například Přidat členské funkce třídy CArray má ARG_TYPE argument:

CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);

Použití jednoduché mapy

Třída jednoduché mapy CMap, přijímá čtyři parametry: klíče, ARG_KEY, hodnotu, a ARG_VALUE.Stejně jako třídy array a seznam mapu tříd lze ukládat libovolný typ dat.Na rozdíl od polí a seznamů, které index a ukládají data objednávky, klíče a hodnoty přiřadit mapy: přístup obsahuje hodnotu uloženou v mapě zadáním hodnoty přidružené klíče.Klíče parametr určuje datový typ klíče používané pro přístup k datům uloženým v mapě.Pokud typ klíče třídy, struktury nebo ARG_KEY parametr je obvykle odkaz na typ zadaný v klíče.Hodnoty parametr určuje typ položky uložené v mapě.Pokud typ ARG_VALUE třídy, struktury nebo ARG_VALUE parametr je obvykle odkaz na typ zadaný v hodnotu.Příklad:

CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;

První příklad uloží MY_STRUCT hodnoty, které jim přístup k int klíčů a vrátí přístup k MY_STRUCT položky odkazem.Druhý příklad uloží CPerson hodnoty, které jim přístup k CString klíče a vrátí odkazy na přístup ke zboží.V tomto příkladu může představovat jednoduchý adresář, ve kterém můžete vyhledat osoby podle příjmení.

Protože klíč parametr je typu CString a KEY_TYPE parametr je typu LPCSTR, klíče jsou uloženy v mapě jako položky typu CString , ale jsou uvedeny funkce, jako SetAt prostřednictvím ukazatele typu LPCSTR.Příklad:

CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);

Pomocí zadaného ukazatele kolekce šablon

Použití ukazatel zadané kolekce šablon, musíte vědět, jaký druh dat lze uložit v těchto kolekcích a jaké parametry se mají použít v deklaracích kolekce.

Používání seznamu a pole zadali ukazatel

Ukazatel zadané pole a seznam tříd CTypedPtrArray a CTypedPtrList, dva parametry: BASE_CLASS a typu.Těchto tříd lze ukládat libovolný typ dat, který jste zadali v typu parametr.Jsou odvozeny z jedné z nontemplate kolekce tříd, které jsou uloženy ukazatelů; Určete tento základní třídy v BASE_CLASS.Pro pole, použijte buď CObArray nebo CPtrArray.Pro seznamy, pomocí CObList nebo CPtrList.

Ve skutečnosti, že při deklaraci kolekce založené na CObList, nová třída dědí nejen členy základní třídy, ale také deklaruje počet další bezpečný členské funkce a operátory, které zajišťuje bezpečnost typů zapouzdřením volání základní třídy členů.Tyto encapsulations spravovat všechny nezbytné typ převodu.Příklad:

CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;

V prvním příkladu deklaruje ukazatel zadané pole, myArray, odvozené z CObArray.Pole jsou uloženy a vrátí odkazy na CPerson objekty (kde CPerson třídy odvozené z CObject).Budete volat jakékoliv CObArray členské funkce, nebo můžete zavolat nový bezpečný GetAt a ElementAt funkce nebo pomocí bezpečného typu [] operátor. 

V druhém příkladu deklaruje seznam zadali ukazatel myList, odvozené z CPtrList.Obsahuje seznam a vrátí odkazy na MY_STRUCT objekty.Na základě třídy CPtrList slouží pro uložení ukazatele na objekty, které nejsou odvozeny z CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.

Použití mapování zadaného ukazatel

Třídy zadané ukazatel mapy CTypedPtrMap, přijímá tři parametry: BASE_CLASS, klíče, a hodnotu.BASE_CLASS Parametr určuje třídu, ze které chcete-li odvodit nové třídy: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOba tak dále.KLÍČ je klíče v CMap: Určuje typ klíče pro vyhledávání.Hodnota je hodnoty v CMap: Určuje typ objektu, které jsou uloženy v mapě.Příklad:

CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;

V prvním příkladu je do mapy na základě CMapPtrToPtr – používá CString klíče, které jsou mapovány na ukazatele na MY_STRUCT.Můžete vyhledat uložené ukazatel voláním typově bezpečný Lookup členské funkce.Lze použít operátor uložené ukazatel vyhledat a přidat, pokud není nalezen. A můžete iterovat mapy pomocí bezpečného typu GetNextAssoc funkce.Můžete také volat jiné členské funkce třídy CMapPtrToPtr.

Ve druhém příkladu je do mapy na základě CMapStringToOb – pomocí řetězcových klíčů, které jsou mapovány na uložené odkazy na CMyObject objekty.Můžete použít stejné členy zajišťující bezpečnost typů, popsané v předchozím odstavci, nebo můžete zavolat členy třídy CMapStringToOb.

[!POZNÁMKA]

Zadáte-li třídy nebo struct zadejte hodnoty parametr, spíše než na ukazatel nebo odkaz na typ, třídy nebo struktury musí mít konstruktor kopie.

Další informace naleznete v tématu jak vytvořit bezpečný kolekce.

Viz také

Koncepty

Kolekce