Partager via


Programmes d’assistance pour les classes de collection

Les classes CMapde collection, CListet CArray utilisent des fonctions d’assistance globales avec modèle à des fins telles que la comparaison, la copie et la sérialisation d’éléments. Dans le cadre de votre implémentation de classes basées sur CMap, CListet CArray, vous devez remplacer ces fonctions si nécessaire avec les versions adaptées au type de données stockées dans votre carte, liste ou tableau. Pour plus d’informations sur la substitution de fonctions d’assistance telles que SerializeElements, consultez l’article Collections : Comment créer une collection de type sécurisé. Notez que ConstructElements et DestructElements ont été déconseillés.

La bibliothèque de classes Microsoft Foundation fournit les fonctions globales suivantes dans afxtempl.h pour vous aider à personnaliser vos classes de collection :

Programmes d’assistance pour les classes de collection

Nom Description
CompareElements Indique si les éléments sont identiques.
CopyElements Copie des éléments d’un tableau vers un autre.
DumpElements Fournit une sortie de diagnostic orientée flux.
HashKey Calcule une clé de hachage.
SérialiserElements Stocke ou récupère des éléments dans ou à partir d’une archive.

CompareElements

Appelé directement par CList::Find et indirectement par CMap::Lookup et CMap::operator[].

template<class TYPE, class ARG_TYPE>
BOOL AFXAPI
CompareElements(
    const TYPE* pElement1,
    const ARG_TYPE* pElement2);

Paramètres

TYPE
Type du premier élément à comparer.

pElement1
Pointeur vers le premier élément à comparer.

ARG_TYPE
Type du deuxième élément à comparer.

pElement2
Pointeur vers le deuxième élément à comparer.

Valeur de retour

Différent de zéro si l’objet pointé par pElement1 est égal à l’objet pointé par pElement2 ; sinon, 0.

Notes

Les CMap appels utilisent les CMap paramètres de modèle KEY et ARG_KEY.

L’implémentation par défaut retourne le résultat de la comparaison de *pElement1 et *pElement2. Remplacez cette fonction pour qu’elle compare les éléments d’une manière appropriée pour votre application.

Le langage C++ définit l’opérateur de comparaison ( ==) pour les types simples (char, int, floatet ainsi de suite), mais ne définit pas d’opérateur de comparaison pour les classes et les structures. Si vous souhaitez utiliser CompareElements ou instancier l’une des classes de collection qui l’utilise, vous devez définir l’opérateur de comparaison ou la surcharge CompareElements avec une version qui retourne les valeurs appropriées.

Spécifications

En-tête : afxtempl.h

CopyElements

Cette fonction est appelée directement par CArray ::Append et CArray ::Copy.

template<class TYPE>
void AFXAPI CopyElements(
    TYPE* pDest,
    const TYPE* pSrc,
    INT_PTR nCount);

Paramètres

TYPE
Paramètre de modèle spécifiant le type d’éléments à copier.

pDest
Pointeur vers la destination où les éléments seront copiés.

pSrc
Pointeur vers la source des éléments à copier.

nCount
Nombre d’éléments à copier.

Notes

L’implémentation par défaut utilise l’opérateur d’affectation simple ( = ) pour effectuer l’opération de copie. Si le type en cours de copie n’a pas d’opérateur surchargé=, l’implémentation par défaut effectue une copie au niveau du bit.

Pour plus d’informations sur l’implémentation de cette fonctionnalité et d’autres fonctions d’assistance, consultez l’article Collections : Comment créer une collection de type sécurisé.

Spécifications

En-tête afxtempl.h

DumpElements

Fournit une sortie de diagnostic orientée flux sous forme de texte pour les éléments de votre collection en cas de substitution.

template<class TYPE>
void  AFXAPI DumpElements(
    CDumpContext& dc,
    const TYPE* pElements,
    INT_PTR nCount);

Paramètres

dc
Contexte de vidage pour les éléments de vidage.

TYPE
Paramètre de modèle spécifiant le type des éléments.

pElements
Pointeur vers les éléments à vider.

nCount
Nombre d’éléments à vider.

Notes

Les CArray::Dumpfonctions et les CMap::Dump fonctions CList::Dumpappellent ceci si la profondeur du vidage est supérieure à 0.

L'implémentation par défaut n'exécute aucune opération. Si les éléments de votre collection sont dérivés CObject, votre remplacement effectue généralement une itération au sein des éléments de la collection, en appelant Dump à son tour chaque élément.

Spécifications

En-tête afxtempl.h

HashKey

Calcule une valeur de hachage pour la clé donnée.

template<class ARG_KEY>
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY  key);

Paramètres

ARG_KEY
Paramètre de modèle spécifiant le type de données utilisé pour accéder aux clés de mappage.

key
Clé dont la valeur de hachage doit être calculée.

Valeur de retour

Valeur de hachage de la clé.

Notes

Cette fonction est appelée directement par CMap::RemoveKey et indirectement par CMap::Lookup et par .CMap::operator[]

L’implémentation par défaut crée une valeur de hachage en déplaçant la clé vers la droite par quatre positions. Remplacez cette fonction afin qu’elle retourne des valeurs de hachage appropriées pour votre application.

Exemple

template <> UINT AFXAPI HashKey(unsigned __int64 key)
{
   // Generate the hash value by XORing the lower 32 bits of the number
   // with the upper 32 bits
   return(UINT(key) ^ UINT(key >> 32));
}

Spécifications

En-tête afxtempl.h

SérialiserElements

CArray, CList et CMap appellent cette fonction pour sérialiser des éléments.

template<class TYPE>
void AFXAPI SerializeElements(CArchive& ar, TYPE* pElements, INT_PTR nCount);

Paramètres

TYPE
Paramètre de modèle spécifiant le type des éléments.

Ar
Objet archive vers ou à partir duquel archiver.

pElements
Pointeur vers les éléments archivés.

nCount
Nombre d’éléments archivés

Notes

L’implémentation par défaut effectue une lecture ou une écriture au niveau du bit.

Pour plus d’informations sur l’implémentation de cette fonctionnalité et d’autres fonctions d’assistance, consultez l’article Collections : Comment créer une collection de type sécurisé.

Exemple

Consultez l’exemple de l’article Collections : Comment créer une collection type-safe.

Spécifications

En-tête afxtempl.h

Voir aussi

Macros et globals
CMap, classe
CList, classe
CArray, classe