Freigeben über


Gewusst wie: Führen Sie eine typsichere Auflistung

In diesem Artikel wird beschrieben, wie Type-Safe Collections für Ihre eigenen Datentypen macht.Folgende Themen werden behandelt:

  • Verwenden von auf Vorlagen basierende Klassen für die Typsicherheit

  • Hilfsfunktionen implementieren

  • Verwenden der nicht auf Vorlagen basierende Auflistungsklassen

Microsoft Foundation Class Library stellt vordefinierte Type-Safe Collections auf C++-Vorlagen bereit.Da diese Vorlagen unterstützen, sind diese Klassen, die Typsicherheit und Benutzerfreundlichkeit und andere Typumwandlung ohne zusätzliche Arbeit bereitzustellen, die beim Laden zu diesem Zweck eine nicht auf Vorlagen basierende Klasse betroffen ist, verwenden.Das MFC-Beispiel Sie SAMMELN wird die Verwendung von auf Vorlagen basierende Auflistungsklassen in einer MFC-Anwendung.Im Allgemeinen verwenden Sie diese Klassen, wenn Sie stets Auflistungen neuen Code schreiben.

Verwenden von auf Vorlagen basierende Klassen für die Typsicherheit

Klicken Sie auf Vorlagen basierende Klassen verwenden

  1. Deklarieren Sie eine Variable des Typs Auflistungsklassen.Beispiele:

    CList<int, int> m_intList;
    
  2. Rufen Sie die Memberfunktionen des Auflistungsobjekts veranschaulicht.Beispiele:

    m_intList.AddTail(100);
    m_intList.RemoveAll();
    
  3. Implementieren Sie ggf. Hilfsfunktionen und SerializeElements.Weitere Informationen zum Implementieren dieser Funktionen finden Sie Hilfsfunktionen implementieren.

Dieses Beispiel zeigt die Deklaration einer Liste der ganze Zahlen an.Der erste Parameter in Schritt 1 ist der Typ der Daten, die als Elemente der Liste gespeichert werden.Gibt an, wie der zweite Parameter übergebenen Daten zu und von Memberfunktionen der Auflistungsklasse, wie Hinzufügen und GetAt zurückgegeben werden soll.

Hilfsfunktionen implementieren

Die auf Vorlagen basierende Auflistungsklassen CArray, CList und globale Hilfsfunktionen CMap Verwendung von fünf, die Sie für die abgeleitete Auflistungsklasse nach Bedarf anpassen können.Weitere Informationen zu dieser Hilfsfunktionen finden Sie unter Auflistungsklassen-Hilfen in der MFC-Referenz.Implementierung der Funktion ist für die meisten Serialisierung verwendet der auf Vorlagen basierende Auflistungsklassen erforderlich.

6s70zdb8.collapse_all(de-de,VS.110).gifSerialisieren von Elementen

CArray, CList und CMap-Klassen rufen SerializeElements auf, um Auflistungselemente zu zu speichern oder sie von einem Archiv zu lesen.

Die Standardimplementierung der SerializeElements Hilfsfunktion führt eine bitweise Schreiben von Objekten zum Archiv oder einem bitweisen Lesen aus dem Archiv auf Objekte, je nachdem, ob die Objekte gespeichert werden oder dem Archiv abgerufen.Überschreiben Sie SerializeElements, wenn diese Aktion nicht geeignet ist.

Wenn die Auflistung die Objekte speichert, die mit CObject abgeleitet sind und Sie das IMPLEMENT_SERIAL Makro in der Implementierung der Auflistungselement - Klasse können Sie die Serialisierung CArchive-Funktionen nutzen, die in CObject und erstellt wurde:

CArray< CPerson, CPerson& > personArray;

template <> void AFXAPI SerializeElements <CPerson> (CArchive& ar, 
   CPerson* pNewPersons, INT_PTR nCount)
{
   for (int i = 0; i < nCount; i++, pNewPersons++)
   {
      // Serialize each CPerson object
      pNewPersons->Serialize(ar);
   }
}

Die überladenen Operatoren für CArchive rufen CObject::Serialize einfügen (oder eine Überschreibung dieser Funktion) für jedes CPerson-Objekt an.

Verwenden der nicht auf Vorlagen basierende Auflistungsklassen

MFC unterstützt auch die Auflistungsklassen, die mit der MFC-Version 1.0 eingeführt wurden.Diese Klassen sind nicht auf Vorlagen.Sie können verwendet werden, um Daten der unterstützten Typen CObject*, UINT, DWORD und CString enthalten soll.Sie können diese vordefinierten Auflistungen verwenden (z. B. CObList), um Auflistungen von Objekten abgeleitet. CObject von AnhaltenMFC stellt auch andere vordefinierte Auflistungen, um Typen wie UINT und void-Zeiger (void*) enthalten.Im Allgemeinen ist es häufig sinnvoll, jedoch eigene typsicheren Auflistungen zu definieren, um Objekte einer spezifischeren Klasse und ihre Ableitungen enthält.Beachten Sie, dass dies mit den Auflistungsklassen nicht auf Vorlagen mehr Arbeit ist, als mit der auf Vorlagen basierende Klassen.

Es gibt zwei Möglichkeiten, Type-Safe Collections mit nicht vorlagenbasierten Auflistungen zu erstellen:

  1. Verwenden Sie die keine vorlagenbasierten Auflistungen mit Typumwandlungen ggf. an.Dies ist der einfacheren Ansatz.

  2. Leiten Sie von und erweitern Sie eine nicht auf Vorlagen basierende typsichere Auflistung.

Um die keine vorlagenbasierten Auflistungen mit Typumwandlung verwenden

  • Verwenden Sie eine der nicht auf Vorlagen basierende Klassen, z. B. CWordArray direkte.

    Sie können z. B. CWordArray erstellen und alle ihm 32-Bit-Werte hinzu, und rufen diese ab.Es gibt keine Wirkung mehr verwenden.Sie verwenden nur die vordefinierte Funktionen.

    Sie können eine vordefinierte Auflistung als CObList auch verwenden, um alle Objekte aus CObject Anhalten abgeleitet.Eine CObList-Auflistung wird so definiert, dass Zeiger auf CObject enthält.Wenn Sie ein Objekt aus der Liste abrufen, müssen Sie möglicherweise das Ergebnis in den richtigen Typ umwandeln, da die CObList-Funktionen Zeiger auf CObject zurückgeben.Wenn Sie beispielsweise CPerson-Objekte in einer Auflistung CObList speichern, müssen Sie ein abgerufenes Element umwandeln, um einen Zeiger auf ein Objekt CPerson.Im folgenden Beispiel wird eine CObList-Auflistung, um CPerson-Objekte aufzunehmen:

    CPerson* p1 = new CPerson();
    CObList myList;
    
    myList.AddHead(p1);   // No cast needed
    CPerson* p2 = (CPerson*)myList.GetHead();
    

    Diese Technik einen vordefinierten Auflistungstyp bei Bedarf von verwenden und umwandeln kann für viele der Auflistung muss ausreichend.Wenn Sie weitere Funktionen Typsicherheit oder mehr benötigen, verwenden Sie eine aus einer Vorlage gebildete Klasse, oder halten Sie die folgenden Schritte ein.

So fügen Sie eine nicht auf Vorlagen basierende typsichere Auflistung ableiten und erweitern

  • Leiten Sie eine eigene Auflistungsklasse von einer der vordefinierten nicht auf Vorlagen basierende Klassen.

    Wenn Sie die Klasse ableiten, können Sie Wrapper typsichere Funktionen hinzufügen, um eine typsichere Schnittstelle zu vorhandenen Funktionen bereitzustellen.

    Wenn Sie z. B. eine Liste von CObList abgeleitet werden, um CPerson Speichern von Objekten, die Wrapper AddHeadPerson und GetHeadPerson-Funktionen hinzufügen, wie unten dargestellt.

    class CPersonList : public CObList
    {
    public:
        void AddHeadPerson( CPerson* person )
            {AddHead( person );}
    
        const CPerson* GetHeadPerson()
            {return (CPerson*)GetHead();}
    };
    

    Diese Funktionen stellen Wrapper ein typsicheres Verfahren, CPerson-Objekte aus der abgeleiteten Liste hinzuzufügen und abzurufen.Sie können sehen, dass für die Funktion, GetHeadPerson Sie einfach die Typumwandlung kapseln.

    Sie können auch neue Funktionen hinzufügen, indem Sie neue Funktionen definieren, die die Features der Auflistung statt vorhandene erweitern Funktionen in den typsicheren Wrapper lediglich, einbindend.Zum Beispiel werden der Artikel Alle Objekte in einer CObject-Auflistung löschen eine Funktion, um alle Objekte zu löschen, die in einer Liste enthalten sind.Diese Funktion kann in abgeleiteten Klasse als Memberfunktion hinzugefügt werden.

Siehe auch

Konzepte

Auflistungen