Share via


CTypedPtrList, classe

Fournit un « wrapper » de type sécurisé pour les objets de la classe CPtrList.

Syntaxe

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

Paramètres

BASE_CLASS
Classe de base de la classe de liste de pointeurs typé ; doit être une classe de liste de pointeurs ( CObList ou CPtrList).

TYPE
Type des éléments stockés dans la liste de classes de base.

Membres

Méthodes publiques

Nom Description
CTypedPtrList ::AddHead Ajoute un élément (ou tous les éléments d’une autre liste) à la tête de la liste (fait un nouveau chef).
CTypedPtrList ::AddTail Ajoute un élément (ou tous les éléments d’une autre liste) à la fin de la liste (fait une nouvelle queue).
CTypedPtrList ::GetAt Obtient l’élément à une position donnée.
CTypedPtrList ::GetHead Retourne l’élément principal de la liste (ne peut pas être vide).
CTypedPtrList ::GetNext Obtient l’élément suivant pour itérer.
CTypedPtrList ::GetPrev Obtient l’élément précédent pour l’itération.
CTypedPtrList ::GetTail Retourne l’élément tail de la liste (ne peut pas être vide).
CTypedPtrList ::RemoveHead Supprime l’élément de la tête de la liste.
CTypedPtrList ::RemoveTail Supprime l’élément de la fin de la liste.
CTypedPtrList ::SetAt Définit l’élément à une position donnée.

Notes

Lorsque vous utilisez CTypedPtrList plutôt que CObList ou CPtrList, l’installation de type case activée C++ permet d’éliminer les erreurs causées par des types de pointeurs incompatibles.

En outre, le CTypedPtrList wrapper effectue une grande partie du cast qui serait nécessaire si vous avez utilisé CObList ou CPtrList.

Étant donné que toutes les CTypedPtrList fonctions sont inline, l’utilisation de ce modèle n’affecte pas considérablement la taille ou la vitesse de votre code.

Les listes dérivées de CObList peuvent être sérialisées, mais celles dérivées de CPtrList ne peuvent pas.

Lorsqu’un CTypedPtrList objet est supprimé ou lorsque ses éléments sont supprimés, seuls les pointeurs sont supprimés, et non les entités qu’ils référencent.

Pour plus d’informations sur l’utilisation CTypedPtrList, consultez les articles Collections et classes basées sur des modèles.

Exemple

Cet exemple crée une instance de CTypedPtrList, ajoute un objet, sérialise la liste sur le disque, puis supprime l’objet :

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;
}

Hiérarchie d'héritage

BASE_CLASS

_CTypedPtrList

CTypedPtrList

Spécifications

En-tête : afxtempl.h

CTypedPtrList ::AddHead

Cette fonction membre appelle BASE_CLASS::AddHead.

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

Paramètres

TYPE
Type des éléments stockés dans la liste de classes de base.

newElement
Pointeur d’objet à ajouter à cette liste. Une valeur NULL est autorisée.

BASE_CLASS
Classe de base de la classe de liste de pointeurs typé ; doit être une classe de liste de pointeurs ( CObList ou CPtrList).

pNewList
Pointeur vers un autre objet CTypedPtrList . Les éléments de pNewList seront ajoutés à cette liste.

Valeur de retour

La première version retourne la valeur POSITION de l’élément nouvellement inséré.

Notes

La première version ajoute un nouvel élément avant le début de la liste. La deuxième version ajoute une autre liste d’éléments avant la tête.

CTypedPtrList ::AddTail

Cette fonction membre appelle BASE_CLASS::AddTail.

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

Paramètres

TYPE
Type des éléments stockés dans la liste de classes de base.

newElement
Pointeur d’objet à ajouter à cette liste. Une valeur NULL est autorisée.

BASE_CLASS
Classe de base de la classe de liste de pointeurs typé ; doit être une classe de liste de pointeurs ( CObList ou CPtrList).

pNewList
Pointeur vers un autre objet CTypedPtrList . Les éléments de pNewList seront ajoutés à cette liste.

Valeur de retour

La première version retourne la valeur POSITION de l’élément nouvellement inséré.

Notes

La première version ajoute un nouvel élément après la fin de la liste. La deuxième version ajoute une autre liste d’éléments après la fin de la liste.

CTypedPtrList ::GetAt

Une variable de type POSITION est une clé pour la liste.

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

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments stockés dans la liste.

position
Valeur POSITION retournée par un appel de fonction membre ou Find précédentGetHeadPosition.

Valeur de retour

Si la liste est accessible via un pointeur vers un const CTypedPtrList, GetAt retourne un pointeur du type spécifié par le paramètre de modèle TYPE. Cela permet à la fonction d’être utilisée uniquement sur le côté droit d’une instruction d’affectation et protège ainsi la liste contre la modification.

Si la liste est accessible directement ou via un pointeur vers un CTypedPtrList, GetAt retourne une référence à un pointeur du type spécifié par le type de paramètre de modèle. Cela permet à la fonction d’être utilisée sur l’un ou l’autre côté d’une instruction d’affectation et permet ainsi aux entrées de liste d’être modifiées.

Notes

Il n’est pas identique à un index, et vous ne pouvez pas fonctionner sur une valeur POSITION vous-même. GetAt récupère le CObject pointeur associé à une position donnée.

Vous devez vous assurer que votre valeur POSITION représente une position valide dans la liste. S’il n’est pas valide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme.

Cette fonction inline appelle BASE_CLASS::GetAt.

CTypedPtrList ::GetHead

Obtient le pointeur qui représente l’élément principal de cette liste.

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

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments stockés dans la liste.

Valeur de retour

Si la liste est accessible via un pointeur vers un const CTypedPtrList, GetHead retourne un pointeur du type spécifié par le paramètre de modèle TYPE. Cela permet à la fonction d’être utilisée uniquement sur le côté droit d’une instruction d’affectation et protège ainsi la liste contre la modification.

Si la liste est accessible directement ou via un pointeur vers un CTypedPtrList, GetHead retourne une référence à un pointeur du type spécifié par le type de paramètre de modèle. Cela permet à la fonction d’être utilisée sur l’un ou l’autre côté d’une instruction d’affectation et permet ainsi aux entrées de liste d’être modifiées.

Notes

Vous devez vous assurer que la liste n’est pas vide avant d’appeler GetHead. Si la liste est vide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme. Utilisez IsEmpty pour vérifier que la liste contient des éléments.

CTypedPtrList ::GetNext

Obtient l’élément de liste identifié par rPosition, puis définit rPosition sur la valeur POSITION de l’entrée suivante dans la liste.

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

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments contenus dans cette liste.

rPosition
Référence à une valeur POSITION retournée par un appel de fonction membre précédent GetNext, GetHeadPositionou autre.

Valeur de retour

Si la liste est accessible via un pointeur vers un const CTypedPtrList, GetNext retourne un pointeur du type spécifié par le paramètre de modèle TYPE. Cela permet à la fonction d’être utilisée uniquement sur le côté droit d’une instruction d’affectation et protège ainsi la liste contre la modification.

Si la liste est accessible directement ou via un pointeur vers un CTypedPtrList, GetNext retourne une référence à un pointeur du type spécifié par le type de paramètre de modèle. Cela permet à la fonction d’être utilisée sur l’un ou l’autre côté d’une instruction d’affectation et permet ainsi aux entrées de liste d’être modifiées.

Notes

Vous pouvez utiliser GetNext dans une boucle d’itération avant si vous établissez la position initiale avec un appel à GetHeadPosition ou CPtrList ::Find.

Vous devez vous assurer que votre valeur POSITION représente une position valide dans la liste. S’il n’est pas valide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme.

Si l’élément récupéré est le dernier de la liste, la nouvelle valeur de rPosition est définie sur NULL.

Il est possible de supprimer un élément pendant une itération. Consultez l’exemple de CObList ::RemoveAt.

CTypedPtrList ::GetPrev

Obtient l’élément de liste identifié par rPosition, puis définit rPosition sur la valeur POSITION de l’entrée précédente dans la liste.

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

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments contenus dans cette liste.

rPosition
Référence à une valeur POSITION retournée par un appel de fonction membre précédent GetPrev ou autre.

Valeur de retour

Si la liste est accessible via un pointeur vers un const CTypedPtrList, GetPrev retourne un pointeur du type spécifié par le paramètre de modèle TYPE. Cela permet à la fonction d’être utilisée uniquement sur le côté droit d’une instruction d’affectation et protège ainsi la liste contre la modification.

Si la liste est accessible directement ou via un pointeur vers un CTypedPtrList, GetPrev retourne une référence à un pointeur du type spécifié par le type de paramètre de modèle. Cela permet à la fonction d’être utilisée sur l’un ou l’autre côté d’une instruction d’affectation et permet ainsi aux entrées de liste d’être modifiées.

Notes

Vous pouvez utiliser GetPrev dans une boucle d’itération inverse si vous établissez la position initiale avec un appel à GetTailPosition ou Find.

Vous devez vous assurer que votre valeur POSITION représente une position valide dans la liste. S’il n’est pas valide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme.

Si l’élément récupéré est le premier de la liste, la nouvelle valeur de rPosition est définie sur NULL.

CTypedPtrList ::GetTail

Obtient le pointeur qui représente l’élément principal de cette liste.

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

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments stockés dans la liste.

Valeur de retour

Si la liste est accessible via un pointeur vers un const CTypedPtrList, GetTail retourne un pointeur du type spécifié par le paramètre de modèle TYPE. Cela permet à la fonction d’être utilisée uniquement sur le côté droit d’une instruction d’affectation et protège ainsi la liste contre la modification.

Si la liste est accessible directement ou via un pointeur vers un CTypedPtrList, GetTail retourne une référence à un pointeur du type spécifié par le type de paramètre de modèle. Cela permet à la fonction d’être utilisée sur l’un ou l’autre côté d’une instruction d’affectation et permet ainsi aux entrées de liste d’être modifiées.

Notes

Vous devez vous assurer que la liste n’est pas vide avant d’appeler GetTail. Si la liste est vide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme. Utilisez IsEmpty pour vérifier que la liste contient des éléments.

CTypedPtrList ::RemoveHead

Supprime l’élément de la tête de la liste et le retourne.

TYPE RemoveHead();

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments stockés dans la liste.

Valeur de retour

Pointeur précédemment à la tête de la liste. Ce pointeur est du type spécifié par le paramètre de modèle TYPE.

Notes

Vous devez vous assurer que la liste n’est pas vide avant d’appeler RemoveHead. Si la liste est vide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme. Utilisez IsEmpty pour vérifier que la liste contient des éléments.

CTypedPtrList ::RemoveTail

Supprime l’élément de la fin de la liste et le retourne.

TYPE RemoveTail();

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments stockés dans la liste.

Valeur de retour

Pointeur précédemment à la fin de la liste. Ce pointeur est du type spécifié par le paramètre de modèle TYPE.

Notes

Vous devez vous assurer que la liste n’est pas vide avant d’appeler RemoveTail. Si la liste est vide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme. Utilisez IsEmpty pour vérifier que la liste contient des éléments.

CTypedPtrList ::SetAt

Cette fonction membre appelle BASE_CLASS::SetAt.

void SetAt(POSITION pos, TYPE newElement);

Paramètres

pos
POSITION de l’élément à définir.

TYPE
Type des éléments stockés dans la liste de classes de base.

newElement
Pointeur d’objet à écrire dans la liste.

Notes

Une variable de type POSITION est une clé pour la liste. Il n’est pas identique à un index, et vous ne pouvez pas fonctionner sur une valeur POSITION vous-même. SetAt écrit le pointeur d’objet à la position spécifiée dans la liste.

Vous devez vous assurer que votre valeur POSITION représente une position valide dans la liste. S’il n’est pas valide, la version de débogage de la bibliothèque de classes Microsoft Foundation affirme.

Pour obtenir des remarques plus détaillées, consultez CObList ::SetAt.

Voir aussi

Exemple MFC COLLECT
Graphique hiérarchique
CPtrList, classe
CObList, classe