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
, GetHeadPosition
ou 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour