Condividi tramite


Supporti delle classi Collection

Le classi CMapdi raccolta , CListe CArray usano funzioni helper globali basati su modelli per scopi quali il confronto, la copia e la serializzazione degli elementi. Nell'ambito dell'implementazione di classi basate su CMap, CListe CArray, è necessario eseguire l'override di queste funzioni in base alle versioni personalizzate per il tipo di dati archiviati nella mappa, nell'elenco o nella matrice. Per informazioni sull'override delle funzioni helper, SerializeElementsad esempio , vedere l'articolo Raccolte: Come creare una raccolta indipendente dai tipi. Si noti che ConstructElements e DestructElements sono stati deprecati.

Microsoft Foundation Class Library fornisce le funzioni globali seguenti in afxtempl.h per personalizzare le classi di raccolta:

Supporti delle classi Collection

Nome Descrizione
CompareElements Indica se gli elementi sono uguali.
CopyElements Copia gli elementi da una matrice a un'altra.
DumpElements Fornisce l'output di diagnostica orientato ai flussi.
HashKey Calcola una chiave hash.
SerializeElements Archivia o recupera elementi da o verso un archivio.

CompareElements

Chiamato direttamente da CList::Find e indirettamente da CMap::Lookup e CMap::operator[].

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

Parametri

TYPE
Tipo del primo elemento da confrontare.

pElement1
Puntatore al primo elemento da confrontare.

ARG_TYPE
Tipo del secondo elemento da confrontare.

pElement2
Puntatore al secondo elemento da confrontare.

Valore restituito

Diverso da zero se l'oggetto a cui punta pElement1 è uguale all'oggetto a cui punta pElement2; in caso contrario, 0.

Osservazioni:

Le CMap chiamate usano i parametri del CMap modello KEY e ARG_KEY.

L'implementazione predefinita restituisce il risultato del confronto tra *pElement1 e *pElement2. Eseguire l'override di questa funzione in modo che confronti gli elementi in modo appropriato per l'applicazione.

Il linguaggio C++ definisce l'operatore di confronto ( ==) per i tipi semplici (char, int, floate così via), ma non definisce un operatore di confronto per classi e strutture. Se si desidera utilizzare CompareElements o per creare un'istanza di una delle classi di raccolta che lo usano, è necessario definire l'operatore di confronto o l'overload CompareElements con una versione che restituisce i valori appropriati.

Requisiti

Intestazione: afxtempl.h

CopyElements

Questa funzione viene chiamata direttamente da CArray::Append e CArray::Copy.

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

Parametri

TYPE
Parametro di modello che specifica il tipo di elementi da copiare.

pDest
Puntatore alla destinazione in cui gli elementi verranno copiati.

pSrc
Puntatore all'origine degli elementi da copiare.

nCount
Numero di elementi da copiare.

Osservazioni:

L'implementazione predefinita usa l'operatore di assegnazione semplice ( = ) per eseguire l'operazione di copia. Se il tipo che viene copiato non dispone di un operator= in overload, l'implementazione predefinita esegue una copia bit per bit.

Per informazioni sull'implementazione di questa e altre funzioni helper, vedere l'articolo Raccolte: Come creare una raccolta indipendente dai tipi.

Requisiti

Intestazione afxtempl.h

DumpElements

Fornisce un output di diagnostica orientato al flusso in formato testo per gli elementi della raccolta quando ne viene eseguito l'override.

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

Parametri

dc
Contesto di dump per gli elementi di dump.

TYPE
Parametro del modello che specifica il tipo degli elementi.

pElements
Puntatore agli elementi di cui eseguire il dump.

nCount
Numero di elementi di cui eseguire il dump.

Osservazioni:

Le CArray::Dumpfunzioni , CList::Dumpe CMap::Dump chiamano questa operazione se la profondità del dump è maggiore di 0.

L'implementazione predefinita non esegue alcuna operazione. Se gli elementi della raccolta sono derivati da CObject, l'override in genere scorrerà gli elementi della raccolta, chiamando Dump a sua volta per ogni elemento.

Requisiti

Intestazione afxtempl.h

HashKey

Calcola un valore hash per la chiave specificata.

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

Parametri

ARG_KEY
Parametro del modello che specifica il tipo di dati usato per accedere alle chiavi della mappa.

key
Chiave il cui valore hash deve essere calcolato.

Valore restituito

Valore hash della chiave.

Osservazioni:

Questa funzione viene chiamata direttamente da CMap::RemoveKey e indirettamente da CMap::Lookup e CMap::operator[].

L'implementazione predefinita crea un valore hash spostando la chiave verso destra di quattro posizioni. Eseguire l'override di questa funzione in modo che restituisca i valori hash appropriati per l'applicazione.

Esempio

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

Requisiti

Intestazione afxtempl.h

SerializeElements

CArray, CList e CMap chiamano questa funzione per serializzare gli elementi.

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

Parametri

TYPE
Parametro del modello che specifica il tipo degli elementi.

Ar
Oggetto archivio da archiviare da o verso.

pElements
Puntatore agli elementi archiviati.

nCount
Numero di elementi archiviati

Osservazioni:

L'implementazione predefinita esegue una lettura o scrittura bit per bit.

Per informazioni sull'implementazione di questa e altre funzioni helper, vedere l'articolo Raccolte: Come creare una raccolta indipendente dai tipi.

Esempio

Vedere l'esempio nell'articolo Raccolte: Come creare una raccolta indipendente dai tipi.

Requisiti

Intestazione afxtempl.h

Vedi anche

Macro e globali
Classe CMap
Classe CList
Classe CArray