CTypedPtrList-Klasse

Stellt einen typsicheren Wrapper für Objekte der Klasse CPtrListbereit.

Syntax

template<class BASE_CLASS, class TYPE>
class CTypedPtrList : public BASE_CLASS

Parameter

BASE_CLASS
Basisklasse der typierten Zeigerlistenklasse; muss eine Zeigerlistenklasse ( CObList oder CPtrList) sein.

TYPE
Typ der elemente, die in der Basisklassenliste gespeichert sind.

Member

Öffentliche Methoden

Name Beschreibung
CTypedPtrList::AddHead Fügt dem Kopf der Liste ein Element (oder alle Elemente in einer anderen Liste) hinzu (macht einen neuen Kopf).
CTypedPtrList::AddTail Fügt dem Listenende ein Element (oder alle Elemente in einer anderen Liste) hinzu (macht einen neuen Tail).
CTypedPtrList::GetAt Ruft das Element an einer bestimmten Position ab.
CTypedPtrList::GetHead Gibt das Kopfelement der Liste zurück (darf nicht leer sein).
CTypedPtrList::GetNext Ruft das nächste Element zum Durchlaufen ab.
CTypedPtrList::GetPrev Ruft das vorherige Element zum Durchlaufen ab.
CTypedPtrList::GetTail Gibt das Tail-Element der Liste zurück (darf nicht leer sein).
CTypedPtrList::RemoveHead Entfernt das Element aus dem Kopf der Liste.
CTypedPtrList::RemoveTail Entfernt das Element aus dem Tail der Liste.
CTypedPtrList::SetAt Legt das Element an einer bestimmten Position fest.

Hinweise

Wenn Sie die C++-Typüberprüfungseinrichtung verwenden CTypedPtrList , CObListCPtrListkönnen Sie Fehler beseitigen, die durch nicht übereinstimmende Zeigertypen verursacht werden.

Darüber hinaus führt der CTypedPtrList Wrapper einen Großteil der Umwandlung aus, die bei Verwendung CObList oder CPtrList.

Da alle CTypedPtrList Funktionen inline sind, wirkt sich die Verwendung dieser Vorlage nicht erheblich auf die Größe oder Geschwindigkeit des Codes aus.

Von ihnen abgeleitete CObList Listen können serialisiert werden, aber nicht von CPtrList denen abgeleitet.

Wenn ein CTypedPtrList-Objekt gelöscht wird oder dessen Elemente entfernt werden, werden nur die Zeiger, und nicht die Entitäten, auf die sie verweisen, entfernt.

Weitere Informationen zur Verwendung CTypedPtrListfinden Sie in den Artikeln Sammlungen und vorlagenbasierten Klassen.

Beispiel

In diesem Beispiel wird eine Instanz von CTypedPtrList, fügt ein Objekt hinzu, serialisiert die Liste auf dem Datenträger und löscht dann das Objekt:

typedef CTypedPtrList<CObList, CMyObject*>  CMyList;
CMyList ml;
CMyObject* pMyObject = new CMyObject();
ml.AddTail(pMyObject);

CFileException e;
CFile myFile;
myFile.Open(_T("CTypedPtrList_File.txt"),
   CFile::modeCreate | CFile::modeWrite, &e);
CArchive ar(&myFile, CArchive::store);
ml.Serialize(ar);

ar.Close();
myFile.Close();

while (!ml.IsEmpty())
{
   delete ml.GetHead();
   ml.RemoveHead();
}

 

class CMyObject : public CObject
{
public:
   int i;
   void Serialize(CArchive& ar);
   CMyObject() { i = 9876; }
protected:
   DECLARE_SERIAL(CMyObject)
};

IMPLEMENT_SERIAL(CMyObject, CObject, 0)

void CMyObject::Serialize(CArchive& ar)
{
   CObject::Serialize(ar);
   if (ar.IsStoring())
      ar << i;
   else
      ar >> i;
}

Vererbungshierarchie

BASE_CLASS

_CTypedPtrList

CTypedPtrList

Anforderungen

Header: afxtempl.h

CTypedPtrList::AddHead

Diese Memberfunktion ruft ::AddHead aufBASE_CLASS.

POSITION AddHead(TYPE newElement);
void AddHead(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

Parameter

TYPE
Typ der elemente, die in der Basisklassenliste gespeichert sind.

Newelement
Der Objektzeiger, der dieser Liste hinzugefügt werden soll. Ein NULL-Wert ist zulässig.

BASE_CLASS
Basisklasse der typierten Zeigerlistenklasse; muss eine Zeigerlistenklasse sein ( CObList oder CPtrList).

pNewList
Ein Zeiger auf ein anderes CTypedPtrList-Objekt . Die Elemente in pNewList werden dieser Liste hinzugefügt.

Rückgabewert

Die erste Version gibt den POSITION-Wert des neu eingefügten Elements zurück.

Hinweise

Die erste Version fügt vor dem Kopf der Liste ein neues Element hinzu. Die zweite Version fügt eine weitere Liste von Elementen vor dem Kopf hinzu.

CTypedPtrList::AddTail

Diese Memberfunktion ruft ::AddTail aufBASE_CLASS.

POSITION AddTail(TYPE newElement);
void AddTail(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

Parameter

TYPE
Typ der elemente, die in der Basisklassenliste gespeichert sind.

Newelement
Der Objektzeiger, der dieser Liste hinzugefügt werden soll. Ein NULL-Wert ist zulässig.

BASE_CLASS
Basisklasse der typierten Zeigerlistenklasse; muss eine Zeigerlistenklasse sein ( CObList oder CPtrList).

pNewList
Ein Zeiger auf ein anderes CTypedPtrList-Objekt . Die Elemente in pNewList werden dieser Liste hinzugefügt.

Rückgabewert

Die erste Version gibt den POSITION-Wert des neu eingefügten Elements zurück.

Hinweise

Die erste Version fügt nach dem Listenende ein neues Element hinzu. Die zweite Version fügt eine weitere Liste von Elementen nach dem Hinterteil der Liste hinzu.

CTypedPtrList::GetAt

Eine Variable vom Typ POSITION ist ein Schlüssel für die Liste.

TYPE& GetAt(POSITION position);
TYPE GetAt(POSITION position) const;

Parameter

TYPE
Vorlagenparameter, der den Typ der in der Liste gespeicherten Elemente angibt.

position
Ein POSITION-Wert, der von einem vorherigen GetHeadPosition Oder Find Elementfunktionsaufruf zurückgegeben wird.

Rückgabewert

Wenn auf die Liste über einen Zeiger auf einen Zeiger zugegriffen const CTypedPtrListwird, GetAt wird ein Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Auf diese Weise kann die Funktion nur auf der rechten Seite einer Zuordnungsanweisung verwendet werden und so die Liste vor Änderungen schützen.

Wenn auf die Liste direkt oder über einen Zeiger auf einen Zeiger zugegriffen CTypedPtrListwird, GetAt wird ein Verweis auf einen Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Dadurch kann die Funktion auf beiden Seiten einer Zuordnungsanweisung verwendet werden und somit die Listeneinträge geändert werden.

Hinweise

Es ist nicht identisch mit einem Index, und Sie können nicht selbst einen POSITION-Wert verwenden. GetAt ruft den Zeiger ab, der CObject einer bestimmten Position zugeordnet ist.

Sie müssen sicherstellen, dass Ihr POSITION-Wert eine gültige Position in der Liste darstellt. Wenn sie ungültig ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt.

Diese Inlinefunktion ruft ::GetAt aufBASE_CLASS.

CTypedPtrList::GetHead

Ruft den Zeiger ab, der das Kopfelement dieser Liste darstellt.

TYPE& GetHead();
TYPE GetHead() const;

Parameter

TYPE
Vorlagenparameter, der den Typ der in der Liste gespeicherten Elemente angibt.

Rückgabewert

Wenn auf die Liste über einen Zeiger auf einen Zeiger zugegriffen const CTypedPtrListwird, GetHead wird ein Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Auf diese Weise kann die Funktion nur auf der rechten Seite einer Zuordnungsanweisung verwendet werden und so die Liste vor Änderungen schützen.

Wenn auf die Liste direkt oder über einen Zeiger auf einen Zeiger zugegriffen CTypedPtrListwird, GetHead wird ein Verweis auf einen Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Dadurch kann die Funktion auf beiden Seiten einer Zuordnungsanweisung verwendet werden und somit die Listeneinträge geändert werden.

Hinweise

Sie müssen sicherstellen, dass die Liste vor dem Aufrufen GetHeadnicht leer ist. Wenn die Liste leer ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt. Verwenden Sie IsEmpty , um zu überprüfen, ob die Liste Elemente enthält.

CTypedPtrList::GetNext

Ruft das von rPosition identifizierte Listenelement ab und legt dann rPosition auf den POSITION-Wert des nächsten Eintrags in der Liste fest.

TYPE& GetNext(POSITION& rPosition);
TYPE GetNext(POSITION& rPosition) const;

Parameter

TYPE
Vorlagenparameter, der den Typ der in dieser Liste enthaltenen Elemente angibt.

Rposition
Ein Verweis auf einen POSITION-Wert, der von einem vorherigen GetNextAufruf GetHeadPositionoder einem anderen Memberfunktionsaufruf zurückgegeben wird.

Rückgabewert

Wenn auf die Liste über einen Zeiger auf einen Zeiger zugegriffen const CTypedPtrListwird, GetNext wird ein Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Auf diese Weise kann die Funktion nur auf der rechten Seite einer Zuordnungsanweisung verwendet werden und so die Liste vor Änderungen schützen.

Wenn auf die Liste direkt oder über einen Zeiger auf einen Zeiger zugegriffen CTypedPtrListwird, GetNext wird ein Verweis auf einen Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Dadurch kann die Funktion auf beiden Seiten einer Zuordnungsanweisung verwendet werden und somit die Listeneinträge geändert werden.

Hinweise

Sie können in einer Vorwärts iterationsschleife verwenden GetNext , wenn Sie die Anfangsposition mit einem Aufruf GetHeadPosition oder CPtrList::Find einrichten.

Sie müssen sicherstellen, dass Ihr POSITION-Wert eine gültige Position in der Liste darstellt. Wenn sie ungültig ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt.

Wenn das abgerufene Element der letzte in der Liste ist, wird der neue Wert von "rPosition " auf NULL festgelegt.

Es ist möglich, ein Element während einer Iteration zu entfernen. Sehen Sie sich das Beispiel für CObList::RemoveAt an.

CTypedPtrList::GetPrev

Ruft das von rPosition identifizierte Listenelement ab und legt dann rPosition auf den POSITION-Wert des vorherigen Eintrags in der Liste fest.

TYPE& GetPrev(POSITION& rPosition);
TYPE GetPrev(POSITION& rPosition) const;

Parameter

TYPE
Vorlagenparameter, der den Typ der in dieser Liste enthaltenen Elemente angibt.

Rposition
Ein Verweis auf einen POSITION-Wert, der von einem vorherigen GetPrev oder einem anderen Memberfunktionsaufruf zurückgegeben wird.

Rückgabewert

Wenn auf die Liste über einen Zeiger auf einen Zeiger zugegriffen const CTypedPtrListwird, GetPrev wird ein Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Auf diese Weise kann die Funktion nur auf der rechten Seite einer Zuordnungsanweisung verwendet werden und so die Liste vor Änderungen schützen.

Wenn auf die Liste direkt oder über einen Zeiger auf einen Zeiger zugegriffen CTypedPtrListwird, GetPrev wird ein Verweis auf einen Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Dadurch kann die Funktion auf beiden Seiten einer Zuordnungsanweisung verwendet werden und somit die Listeneinträge geändert werden.

Hinweise

Sie können in einer Umgekehrten Iterationsschleife verwendenGetPrev, wenn Sie die Anfangsposition mit einem Aufruf oder Findeinem Aufruf GetTailPosition einrichten.

Sie müssen sicherstellen, dass Ihr POSITION-Wert eine gültige Position in der Liste darstellt. Wenn sie ungültig ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt.

Wenn das abgerufene Element der erste in der Liste ist, wird der neue Wert von "rPosition " auf NULL festgelegt.

CTypedPtrList::GetTail

Ruft den Zeiger ab, der das Kopfelement dieser Liste darstellt.

TYPE& GetTail();
TYPE GetTail() const;

Parameter

TYPE
Vorlagenparameter, der den Typ der in der Liste gespeicherten Elemente angibt.

Rückgabewert

Wenn auf die Liste über einen Zeiger auf einen Zeiger zugegriffen const CTypedPtrListwird, GetTail wird ein Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Auf diese Weise kann die Funktion nur auf der rechten Seite einer Zuordnungsanweisung verwendet werden und so die Liste vor Änderungen schützen.

Wenn auf die Liste direkt oder über einen Zeiger auf einen Zeiger zugegriffen CTypedPtrListwird, GetTail wird ein Verweis auf einen Zeiger des Typs zurückgegeben, der durch den Vorlagenparameter TYPE angegeben wird. Dadurch kann die Funktion auf beiden Seiten einer Zuordnungsanweisung verwendet werden und somit die Listeneinträge geändert werden.

Hinweise

Sie müssen sicherstellen, dass die Liste vor dem Aufrufen GetTailnicht leer ist. Wenn die Liste leer ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt. Verwenden Sie IsEmpty , um zu überprüfen, ob die Liste Elemente enthält.

CTypedPtrList::RemoveHead

Entfernt das Element aus dem Kopf der Liste und gibt es zurück.

TYPE RemoveHead();

Parameter

TYPE
Vorlagenparameter, der den Typ der in der Liste gespeicherten Elemente angibt.

Rückgabewert

Der Zeiger, der sich zuvor am Anfang der Liste befindet. Dieser Zeiger ist vom Typ, der durch den Vorlagenparameter TYPE angegeben wird.

Hinweise

Sie müssen sicherstellen, dass die Liste vor dem Aufrufen RemoveHeadnicht leer ist. Wenn die Liste leer ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt. Verwenden Sie IsEmpty , um zu überprüfen, ob die Liste Elemente enthält.

CTypedPtrList::RemoveTail

Entfernt das Element aus dem Tail der Liste und gibt es zurück.

TYPE RemoveTail();

Parameter

TYPE
Vorlagenparameter, der den Typ der in der Liste gespeicherten Elemente angibt.

Rückgabewert

Der Zeiger, der sich zuvor am Ende der Liste befindet. Dieser Zeiger ist vom Typ, der durch den Vorlagenparameter TYPE angegeben wird.

Hinweise

Sie müssen sicherstellen, dass die Liste vor dem Aufrufen RemoveTailnicht leer ist. Wenn die Liste leer ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt. Verwenden Sie IsEmpty , um zu überprüfen, ob die Liste Elemente enthält.

CTypedPtrList::SetAt

Diese Memberfunktion ruft ::SetAt aufBASE_CLASS.

void SetAt(POSITION pos, TYPE newElement);

Parameter

pos
Die POSITION des festzulegenden Elements.

TYPE
Typ der elemente, die in der Basisklassenliste gespeichert sind.

Newelement
Der Objektzeiger, der in die Liste geschrieben werden soll.

Hinweise

Eine Variable vom Typ POSITION ist ein Schlüssel für die Liste. Es ist nicht identisch mit einem Index, und Sie können nicht selbst einen POSITION-Wert verwenden. SetAt schreibt den Objektzeiger auf die angegebene Position in der Liste.

Sie müssen sicherstellen, dass Ihr POSITION-Wert eine gültige Position in der Liste darstellt. Wenn sie ungültig ist, wird die Debugversion der Microsoft Foundation-Klassenbibliothek bestätigt.

Ausführlichere Hinweise finden Sie unter "CObList::SetAt".

Siehe auch

MFC Sample COLLECT
Hierarchiediagramm
CPtrList-Klasse
CObList-Klasse