Supporti delle classi Collection
Le classi CMap
di raccolta , CList
e 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
, CList
e 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, SerializeElements
ad 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
, float
e 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::Dump
funzioni , CList::Dump
e 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