Classes basée sur les rôles
Cet article explique les classes de collection basées sur des modèles de type sécurisé dans la version 3,0 de MFC et versions ultérieures.L'utilisation de ces modèles il est préférable de créer des collections de type sécurisé et fournit la sécurité de type plus efficacement que l'utilisation des classes de collection pas sur des modèles.
MFC prédéfinit deux catégories de collections basées sur des modèles :
Tableau, liste, et classes simples de mappage
CArray, CList, CMap
Tableaux, des listes, et des mappages des pointeurs typés
CTypedPtrArray, CTypedPtrList, CTypedPtrMap
Les classes de collections simples sont toutes dérivées de la classe CObject, elles héritent la sérialisation, la création dynamique, et d'autres propriétés d' CObject.Les classes de collections typées de pointeur exigent que vous indiquiez la classe que vous dérivez de (qui doit avoir l'une des collections non basées sur des modèles de pointeur prédéfinies par les MFC, tel qu' CPtrList ou CPtrArray.Votre nouvelle classe de collection hérite de la classe de base spécifiée, et de la nouvelle des appels encapsulés par utilisation des fonctions membres classe aux membres de la classe de base pour appliquer la sécurité de type.
Pour plus d'informations sur les modèles C++, consultez modèles dans le Guide de référence du langage C++.
À l'aide de le tableau, la liste, et les modèles simples de mappage
Pour utiliser les modèles simples de collection, vous devez savoir quel genre de données que vous pouvez stocker dans ces collections et les paramètres à utiliser dans vos déclarations de collection.
Utilisation simple de tableau et de liste
Les classes simples de tableau et de liste, CArray et CList, prennent deux paramètres : TYPE et ARG_TYPE.Ces classes peuvent stocker n'importe quel type de données, que vous spécifiez dans le paramètre de type :
Types de données fondamentaux C++, telles qu' int, char, et float
Structures et classes C++
d'autres types que vous définissez
Pour des raisons de commodité et l'efficacité, vous pouvez utiliser le paramètre d' ARG_TYPE pour spécifier le type d'arguments de fonction.En général, vous spécifiez ARG_TYPE comme référence au type que vous avez nommé dans le paramètre de type .Par exemple :
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
Le premier exemple déclare une collection de tableau, myArray, qui contient intS.Le deuxième exemple déclare une collection de listes, myList, qui stocke les objets d' CPerson .Certaines fonctions membres des classes de collection prennent les arguments dont le type est spécifié par le paramètre de modèle d' ARG_TYPE .Par exemple, la fonction membre de Ajouter de la classe CArray prend un argument d' ARG_TYPE :
CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);
Utilisation simple de mappage
La classe simple de cartes, CMap, prend quatre paramètres : CLÉ, ARG_KEY, VALEUR, et ARG_VALUE.Comme les classes de tableau et de liste, les classes de mappage peuvent stocker n'importe quel type de données.Contrairement aux tableaux et de listes, qui est connu et classent les données qu'il stocke, mappe associent les clés et les valeurs : Vous accédez à une valeur stockée dans une table en spécifiant la clé associée à la valeur.Le paramètre HEAD spécifie le type de données des clés utilisées pour accéder aux données stockées dans le mappage.Si le type de CLÉ est une structure ou une classe, le paramètre d' ARG_KEY est en général une référence au type spécifié dans la CLÉ.Le paramètre Value spécifie le type des éléments stockés dans le mappage.Si le type d' ARG_VALUE est une structure ou une classe, le paramètre d' ARG_VALUE est en général une référence au type spécifié dans VALEUR.Par exemple :
CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;
Le premier exemple stocke les valeurs d' MY_STRUCT , y accède par des clés d' int , puis retourne les éléments accessibles d' MY_STRUCT par référence.Le deuxième exemple stocke les valeurs d' CPerson , d'accéder à ces derniers par des clés d' CString , et aux références de retour aux éléments accessibles.Cet exemple peut représenter un carnet d'adresses simple, dans lequel vous les personnes de recherche par le nom.
Étant donné que le paramètre HEAD est de type CString et le paramètre de KEY_TYPE est de type LPCSTR, les clés sont stockées dans le mappage comme éléments de type CString mais sont référencées dans les fonctions telles qu' SetAt via des pointeurs de type LPCSTR.Par exemple :
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);
Utilisation des modèles de collection de type pointeur
Pour utiliser les modèles de collection de type pointeur, vous devez connaître les types de données que vous pouvez stocker dans ces collections et les paramètres à utiliser dans vos déclarations de collection.
Tableau de type pointeur et utilisation de liste
Les classes de tableau et de liste de type pointeur, CTypedPtrArray et CTypedPtrList, prennent deux paramètres : BASE_CLASS et TYPE.Ces classes peuvent stocker n'importe quel type de données, que vous spécifiez dans le paramètre de type .Elles sont dérivées de l'une des classes de collection non basées sur des modèles qui stocke des pointeurs ; vous spécifiez cette classe de base dans BASE_CLASS.Pour les tableaux, utilisez CObArray ou CPtrArray.Pour les listes, utilisez CObList ou CPtrList.
En effet, lorsque vous déclarez une collection en fonction, supposons CObList, la nouvelle classe hérite pas uniquement les membres de sa classe de base, mais elle indique également un certain nombre de fonctions membres et d'opérateurs de type sécurisé supplémentaires HTML qui fournissent la sécurité de type en encapsulant les appels aux membres de la classe de base.Ces encapsulations gérer toute la conversion de type nécessaire.Par exemple :
CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;
Le premier exemple déclare un tableau de type pointeur, myArray, dérivé d' CObArray.Le tableau stocke et retourne les pointeurs vers des objets d' CPerson (où CPerson est une classe dérivée d' CObject).Vous pouvez appeler toute fonction membre d' CObArray , ou vous pouvez appeler nouveaux GetAt et fonctions de type sécurisé d' ElementAt ou utiliser l'opérateur de type sécurisé de [] .
Le deuxième exemple déclare une liste de type pointeur, myList, dérivé d' CPtrList.La liste enregistre et retourne les pointeurs vers des objets d' MY_STRUCT .Une classe en fonction CPtrList est utilisée pour stocker les pointeurs vers des objets non dérivés d' CObject.CTypedPtrList possède plusieurs fonctions membres de type sécurisé : GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, et GetAt.
Utilisation de mappage de type pointeur
La classe de mappage de type pointeur, CTypedPtrMap, prend trois paramètres : BASE_CLASS, CLÉ, et VALEUR.Le paramètre d' BASE_CLASS spécifie la classe à partir duquel dériver la classe : CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb, et ainsi de suite.La CLÉ est analogue UNE INTRODUIRE AU CLAVIERCMap: Elle spécifie le type de la clé utilisée pour les recherches.La VALEUR est analogue UNE ÉVALUER dans CMap: Elle spécifie le type d'objet stocké dans le mappage.Par exemple :
CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;
Le premier exemple est une mappages basés sur CMapPtrToPtr — il utilise des clés d' CString mappées aux pointeurs vers MY_STRUCT.Vous pouvez rechercher un pointeur stocké en appelant une fonction membre de type sécurisé d' Lookup .Vous pouvez utiliser l'opérateur de [] pour rechercher un pointeur stockées et d'ajouter si non signalé.Et vous pouvez itérer la carte à l'aide de la fonction de type sécurisé d' GetNextAssoc .Vous pouvez également appeler d'autres fonctions membres de classe CMapPtrToPtr.
Le deuxième exemple est une mappages basés sur CMapStringToOb (il utilise des clés de chaîne mappées aux pointeurs stockés aux objets d' CMyObject .Vous pouvez utiliser les mêmes membres de type sécurisé décrits dans le paragraphe précédent, ou vous pouvez appeler des membres de classe CMapStringToOb.
[!REMARQUE]
Si vous spécifiez un type de class ou d' struct pour le paramètre Value , plutôt qu'un pointeur ou une référence au type, la classe ou la structure doit avoir un constructeur de copie.
Pour plus d'informations, consultez faites procédure une collection de type sécurisé.