CTypedPtrList-Klasse
Stellt einen typsicheren Wrapper für Objekte der Klasse CPtrList
bereit.
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
, CObList
CPtrList
kö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 CTypedPtrList
finden 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 CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 GetHead
nicht 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 GetNext
Aufruf GetHeadPosition
oder einem anderen Memberfunktionsaufruf zurückgegeben wird.
Rückgabewert
Wenn auf die Liste über einen Zeiger auf einen Zeiger zugegriffen const CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 Find
einem 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 CTypedPtrList
wird, 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 CTypedPtrList
wird, 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 GetTail
nicht 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 RemoveHead
nicht 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 RemoveTail
nicht 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für