Programmes d’assistance pour les classes de collection
Les classes CMap
de collection, CList
et 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
, CList
et 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
, float
et 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::Dump
fonctions et les CMap::Dump
fonctions CList::Dump
appellent 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