Podle šablony třídy
Tento článek vysvětluje kolekce založené na šablonách bezpečné typ třídy v MFC verze 3.0 a novější.Pomocí těchto šablon vytvořit bezpečné typ kolekce je pohodlnější a pomáhá poskytovat bezpečnost typů efektivněji než pomocí kolekce tříd, které nejsou založeny na šablonách.
MFC predefines dvě kategorie kolekce založené na šablonách:
Jednoduché pole, seznam a mapa třídy
CArray, CList, CMap
Pole, seznamy a mapy zadaný ukazatele
CTypedPtrArray, CTypedPtrList, CTypedPtrMap
Kolekce jednoduché třídy jsou odvozeny od třídy CObject, aby zdědily serializace, vytvoření dynamických a další vlastnosti CObject.Kolekce třídy zadaný ukazatel požadovat zadání odvozena od třídy – které musí být předdefinovány MFC, například kolekce ukazatel nontemplate CPtrList nebo CPtrArray.Nové kolekce třídy dědí ze zadaného základní třídy a funkce členů nové třídy použít k vynucení bezpečnosti typ zapouzdřené volání členů v základní třídě.
Další informace o šablonách C++, viz šablony v C++ jazyková Reference.
Pomocí jednoduché pole, seznamy a šablony Mapa
Chcete-li použít jednoduché kolekce šablon, musíte vědět, jaký druh dat můžete uložit tyto kolekce a jaké parametry pro použití ve vaší kolekci prohlášení.
Jednoduché pole a seznam použití
Jednoduché pole a seznam tříd CArray a CList, dva parametry: typu a ARG_TYPE.Tyto třídy můžete uložit libovolný typ dat v typu parametr:
Typy základních dat C++, jako například int, char, a float
C++ struktur a třídy
Jiné typy, které definujete
Pro pohodlí a účinnost lze použít ARG_TYPE parametr určuje typ argumentů funkce.Obvykle je určit ARG_TYPE jako odkaz na typ s názvem v typu parametr.Příklad:
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
První příklad deklaruje matici kolekce myArray, který obsahuje ints.Druhý příklad deklaruje seznam kolekce myList, který ukládá CPerson objektů.Přijmout určité členské funkce tříd kolekce argumentů, jejichž typ je určen ARG_TYPE parametr šablony.Například Přidat členské funkce třídy CArray trvá ARG_TYPE argument:
CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);
Jednoduché použití mapy
Třída jednoduché mapy CMap, čtyři parametry: KLÍČŮ, ARG_KEY, hodnotu, a ARG_VALUE.Jako třídy array a seznam tříd mapy můžete uložit libovolný datový typ.Na rozdíl od polí a seznamů, které index a ukládají data objednávky, klíče a hodnoty přidružit mapy: přístup hodnotu uloženou v mapě zadáním hodnoty přidružené klíče.KLÍČŮ parametr určuje typ dat používaný pro přístup k datům uloženým v mapě klíčů.Pokud typ klíč je třída, struktura nebo ARG_KEY parametr je obvykle odkaz na typ zadaný v KLÍČŮ.Hodnotu parametr určuje typ položky uložené v mapě.Pokud typ ARG_VALUE je třída, struktura 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 obchody MY_STRUCT hodnoty, které jim přistupuje k int klíčů a vrátí přístup MY_STRUCT položky odkazem.Druhý příklad obchody CPerson hodnoty, které jim přistupuje k CString klíčů a vrátí odkazy na položky přístup.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 ukazatelů typu LPCSTR.Příklad:
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);
Pomocí ukazatele zadané kolekce šablon
Chcete-li použít ukazatel zadané kolekce šablon musíte vědět, jaké typy dat můžete uložit tyto kolekce a jaké parametry pro použití ve vaší kolekci prohlášení.
Použití seznamu a pole zadali ukazatel
Seznam tříd a pole zadali ukazatel CTypedPtrArray a CTypedPtrList, dva parametry: BASE_CLASS a typu.Tyto třídy můžete uložit libovolný typ dat v typu parametr.Jsou odvozeny z jedné kolekce tříd nontemplate, které ukládá ukazatelů; Zadejte tuto základní třídy v BASE_CLASS.Pro pole, použijte buď CObArray nebo CPtrArray.Seznamy, použijte buď CObList nebo CPtrList.
Ve skutečnosti říci při deklarování kolekce založené na CObList, nová třída dědí pouze členové jeho základní třídy, ale také deklaruje počet další typ bezpečné členské funkce a subjekty zajišťující bezpečnost typů zapouzdřením volání členů v základní třídě.Tyto encapsulations spravovat všechny nezbytné typ převodu.Příklad:
CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;
První příklad prohlašuje zadali ukazatel matice, myArray, odvozené z CObArray.Ukládá matice a vrátí odkazy na CPerson objekty (kde CPerson Třída odvozená od CObject).Budete volat jakékoliv CObArray členské funkce, nebo můžete volat nový typ bezpečné GetAt a ElementAt funkce nebo použijte typ bezpečné [] operátor.
Druhý příklad prohlašuje zadali ukazatel seznam myList, odvozené z CPtrList.Ukládá seznam a vrátí odkazy na MY_STRUCT objektů.Třída založené na CPtrList se používá pro ukládání odkazy na objekty není odvozen od CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.
Mapa využití zadali ukazatel
Třída zadali ukazatel mapa CTypedPtrMap, má tři parametry: BASE_CLASS, klíč, a hodnotu.BASE_CLASS Parametr určuje třídu, ze které odvodit nové třídy: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb, atd.KLÍČ je analogická KLÍČŮ v CMap: Určuje typ klíče používaného pro vyhledávání.Hodnota je analogická hodnotu 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;
První příklad je založena na mapě CMapPtrToPtr – používá CString klíčům mapována na ukazatele na MY_STRUCT.Můžete vyhledat uložené ukazatel voláním bezpečné typu Lookup členské funkce.Můžete použít [] operátor vyhledat uložené ukazatele a přidat jej Pokud není nalezen.A můžete iterovat pomocí bezpečných typ mapy GetNextAssoc funkce.Můžete také volat jiné členské funkce třídy CMapPtrToPtr.
Druhý příklad je založena na mapě CMapStringToOb – používá řetězec klíčů namapován uložené odkazy na CMyObject objektů.Můžete použít stejné členy bezpečné typu popsaného v předchozím odstavci nebo zavoláte členy třídy CMapStringToOb.
[!POZNÁMKA]
Pokud zadáte třídy nebo struct zadejte hodnotu parametr, spíše než ukazatele nebo odkaz na typ, třídy nebo struktury musí mít konstruktor kopie.
Další informace naleznete v Jak provést bezpečné typ kolekce.