Auf Vorlagen basierende Klassen
In diesem Artikel werden die typsicheren auf Vorlagen basierende Auflistungsklassen in MFC-Version 3.0 und höher.Mithilfe dieser Vorlagen Type-Safe Collections ist einfacher zu erstellen und die Typsicherheit bieten effizienter als die Verwendung von Auflistungsklassen nicht auf Vorlagen bereit.
MFC definiert zwei Kategorien von vorlagenbasierten Auflistungen vor:
Einfaches Array von Zuordnungsklassen Liste.
CArray, CList, CMap
Arrays, Listen und Zuordnungen typisierter Zeiger
CTypedPtrArray, CTypedPtrList, CTypedPtrMap
Die einfachen Auflistungsklassen befinden sich alle von der Klasse abgeleitet CObject erben, sodass sie die Serialisierung die dynamische Erstellung und andere Eigenschaften von CObject.Die typisierten Zeiger auflistungsklassen benötigen Sie die Klasse anzugeben, die von ableiten, das eine der Zeiger nicht auf Vorlagen basierende Auflistungen sein muss, die von MFC z. B. CPtrList oder CPtrArray vordefiniert sind.Die neue Auflistungsklasse erben von der angegebenen Basisklasse und den neuen gekapselten Aufrufen der Memberfunktion der Klasse auf Basisklassenmember verwendet werden, um Typsicherheit zu erzwingen.
Weitere Informationen über C++-Vorlagen finden Sie unter Vorlagen in der C++-Sprachreferenz.
Verwenden des einfachen Arrays der Liste und der Zuordnungs-Vorlagen
Um die einfachen Vorlagen Auflistung zu können, müssen Sie wissen, welche Art von Daten in diesen Auflistungen und speichern können, welche Deklarationen Auflistungen in Ihren zu verwendenden Parameter.
Einfache Array-und Listen-Verwendung
Die einfachen Array- und Listen und CList-Klassen, CArray, nehmen zwei Parameter: TYPE und ARG_TYPE.Diese Klassen können einen beliebigen Datentyp speichern, den Sie im Typparameter angeben:
Grundlegende C++-Datentypen, wie int, char und float
C++-Strukturen und Klassen
Andere Typen, die Sie definieren
Zur Vereinfachung und Effizienz können Sie den ARG_TYPE-Parameter verwenden, um den Typ von Funktionsargumenten anzugeben.Normalerweise geben Sie ARG_TYPE als Verweis auf den Typ an, den Sie in Typparameter benannten.Beispiele:
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
Im ersten Beispiel deklariert ein Array mit myArray-Auflistung, int s enthält.Im zweiten Beispiel deklariert eine Listenauflistung, myList, die CPerson-Objekte gespeichert werden.Bestimmte Memberfunktionen der Auflistungsklassen verwenden, deren Argumente vom Typ ARG_TYPE Vorlagenparameter angeben.Zum Beispiel hat die Hinzufügen-Memberfunktion der Klasse CArray ein ARG_TYPE-Argument:
CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);
Einfache Zuordnungs-Verwendung
Die einfache Klasse, Zuordnungen, CMap verwendet vier Parameter: KEY-, ARG_KEYWERT, und ARG_VALUE.Wie die Array- und Listen Klassen können die von Zuordnungsklassen jeden Datentyp speichern.Im Gegensatz zu Arrays und Listen der Index und Sortieren der Daten, die sie speichern, die Tasten employees Zuordnungen und die Werte: Sie greifen auf einen Wert an, der in einer Zuordnung gespeichert ist, indem Sie die zugehörige Schlüssel des Werts angeben.Der SCHLÜSSEL-Parameter gibt den Datentyp der Schlüssel an, die auf Daten verwendet werden, die in der Zuordnung gespeichert werden.Wenn der Typ von KEY- eine Struktur oder eine Klasse ist, ist der ARG_KEY-Parameter in der Regel ein Verweis auf den Typ, der in KEY- angegeben wird.Der Value-Parameter gibt den Typ der Elemente, die in der Zuordnung gespeichert werden.Wenn der Typ von ARG_VALUE eine Struktur oder eine Klasse ist, ist der ARG_VALUE-Parameter in der Regel ein Verweis auf den Typ, der in WERT angegeben wird.Beispiele:
CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;
Im ersten Beispiel werden MY_STRUCT-Werte, greift auf diese durch int Schlüssel und gibt MY_STRUCT zugegriffene Elemente als Verweis zurückgegeben.Im zweiten Beispiel werden CPerson-Werte, greift auf diese durch CString Schlüssel verwendeten Verweise auf Elemente und gibt diese zurück.In diesem Beispiel könnte ein einfaches Adressbuch dar, in dem nach Nachname von Personen Auf der obersten Ebene enthalten.
Da der SCHLÜSSEL-Parametern vom Typ CString ist und der KEY_TYPE-Parameter vom Typ LPCSTR ist, werden die Schlüssel gespeichert, in der Zuordnung als Elemente des Typs CString aber in Funktionen, z. B. durch SetAt Zeiger vom Typ LPCSTR verwiesen.Beispiele:
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);
Verwenden von Auflistungs-Vorlagen des Zeigers typabhängigen
Um die Auflistung von typabhängigen des Zeigers verwenden zu können, müssen Sie wissen, welche Arten von Daten in diesen Auflistungen gespeichert werden können und welche Deklarationen Auflistungen in Ihren zu verwendenden Parameter.
Array des Zeigers typabhängigen und Listen-Verwendung
Die Array- und Listen Klassen des Zeigers, CTypedPtrArray typabhängigen und CTypedPtrList, nehmen zwei Parameter: BASE_CLASS und TYPE.Diese Klassen können einen beliebigen Datentyp speichern, den Sie im Typparameter angeben.Sie können entweder von der nicht auf Vorlagen basierende Auflistungsklassen abgeleitet, die Zeiger speichert. Sie geben diese Basisklasse in BASE_CLASS an.Für Arrays verwenden Sie entweder CObArray oder CPtrArray.Für Listen verwenden Sie entweder CObList oder CPtrList.
Wenn Sie eine Auflistung deklarieren, sagen basierend CObList Sie die neue Klasse erbt nicht nur die Member der Basisklasse deklariert, aber auch einige zusätzliche typsichere Memberfunktionen und Operatoren, sodass die Typsicherheit vom Kapseln von Aufrufen zu den Basisklassenmember bereitstellen.Diese Kapselungen verwalten alle erforderliche Typkonvertierung.Beispiele:
CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;
Im ersten Beispiel deklariert ein Array des Zeigers, myArray typabhängigen von CObArray abgeleitet ist.Das Array gespeichert und gibt Zeiger auf CPerson-Objekten zurück (wobei CPerson eine Klasse ist, die von CObject abgeleitet ist).Sie können jede CObArray-Memberfunktion aufrufen, oder Sie können neue typsichere GetAt und die ElementAt-Funktionen aufrufen oder den typsicheren []-Operator verwenden.
Im zweiten Beispiel deklariert eine Liste des Zeigers, myList typabhängigen von CPtrList abgeleitet ist.Die Liste gespeichert und gibt Zeiger auf MY_STRUCT-Objekten zurück.Eine Klasse auf Grundlage CPtrList wird zum Speichern von Zeigern auf Objekte verwendet, die von CObject nicht abgeleitet sind.CTypedPtrList verfügt über mehrere typsichere Memberfunktionen: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev und GetAt.
Zuordnungs-Verwendung des Zeigers typabhängigen
Die Klasse des Zeigers typabhängigen Zuordnungen, CTypedPtrMap, akzeptiert drei Parameter: BASE_CLASS, KEY- und WERT.Der BASE_CLASS-Parameter gibt die Klasse an, von der die neue Klasse abgeleitet: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb usw.KEY-, analog ist in CMapTO VERSCHLÜSSELN : Es gibt den Typ des Schlüssels an, die für die Suche verwendet wird.WERT ist in CMap analog: WERT Es gibt den Typ des Objekts in der Zuordnung dargestellt.Beispiele:
CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;
Im ersten Beispiel wird eine Zuordnung auf Grundlage CMapPtrToPt r — CString Schlüssel verwendet, die Zeiger auf MY_STRUCT zugeordnet sind.Sie können einen gespeicherten Zeiger nachschlagen, indem Sie eine typsichere Lookup-Memberfunktion aufrufen.Sie können den Operator [] verwenden, um einen gespeicherten Zeiger suchen und hinzuzufügen, wenn es nicht gefunden wird.Und Sie können die Zuordnung mithilfe von typsicheren GetNextAssoc-Funktion durchlaufen.Sie können andere Memberfunktion der Klasse CMapPtrToPtr aufrufen.
Im zweiten Beispiel wird eine Zuordnung auf Grundlage CMapStringToO b — es wird die Zeichenfolgen von Zeigern auf, die auf gespeicherten CMyObject-Objekten zugeordnet sind.Sie können dieselben typsicheren Member verwenden, die im vorherigen Absatz beschrieben sind, oder Sie können Member der Klasse CMapStringToOb aufrufen.
Hinweis |
---|
Wenn Sie einen class oder struct-Typ für den Value-Parameter angeben, anstatt einen Zeiger oder eine Referenz auf den Typ, müssen die Klasse oder Struktur über einen Kopierkonstruktor verfügen. |
Weitere Informationen finden Sie unter So erstellen Sie eine typsichere Auflistung ausführt.