Dela via


Hjälp för samlingsklass

Samlingsklasserna CMap, CListoch CArray använder mallade globala hjälpfunktioner för sådana ändamål som att jämföra, kopiera och serialisera element. Som en del av implementeringen av klasser baserat på CMap, CListoch CArraymåste du åsidosätta dessa funktioner efter behov med versioner som är skräddarsydda för den typ av data som lagras i din karta, lista eller matris. Information om övergripande hjälpfunktioner som SerializeElementsfinns i artikeln Samlingar: Skapa en Type-Safe-samling. Observera att ConstructElements och DestructElements har blivit inaktuella.

Microsoft Foundation-klassbiblioteket innehåller följande globala funktioner i afxtempl.h som hjälper dig att anpassa dina samlingsklasser:

Hjälp för samlingsklass

Namn Beskrivning
CompareElements Anger om elementen är samma.
CopyElements Kopierar element från en matris till en annan.
DumpElements Tillhandahåller strömorienterade diagnostikutdata.
HashKey Beräknar en hash-nyckel.
SerializeElements Lagrar eller hämtar element till eller från ett arkiv.

CompareElements

Anropas direkt av CList::Find och indirekt av CMap::Lookup och CMap::operator[].

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

Parameterar

TYP
Typen av det första element som ska jämföras.

pElement1
Pekare till det första element som ska jämföras.

ARG_TYPE
Typen av det andra element som ska jämföras.

pElement2
Pekare till det andra elementet som ska jämföras.

Returvärde

Nonzero om objektet som pekas på av pElement1 är lika med det objekt som pekas på av pElement2; annars 0.

Anmärkningar

Anropen CMapCMap använder mallparametrarna KEY och ARG_KEY.

Standardimplementeringen returnerar resultatet av jämförelsen av *pElement1 och *pElement2. Åsidosätt den här funktionen så att den jämför elementen på ett sätt som passar ditt program.

C++-språket definierar jämförelseoperatorn (==) för enkla typer (char, int, floatoch så vidare) men definierar inte en jämförelseoperator för klasser och strukturer. Om du vill använda CompareElements eller instansiera någon av de samlingsklasser som använder den måste du antingen definiera jämförelseoperatorn eller överlagra CompareElements med en version som returnerar lämpliga värden.

Kravspecifikation

Rubrik: afxtempl.h

CopyElements

Den här funktionen anropas direkt av CArray::Append och CArray::Copy.

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

Parameterar

TYP
Mallparameter som anger vilken typ av element som ska kopieras.

pDest
Pekare till målet där elementen ska kopieras.

pSrc
Pekare till källan för de element som ska kopieras.

nCount
Antal element som ska kopieras.

Anmärkningar

Standardimplementeringen använder den enkla tilldelningsoperatorn ( = ) för att utföra kopieringsåtgärden. Om den typ som kopieras inte har en överbelastad operator=, utför standardimplementeringen en bitvis kopia.

Information om hur du implementerar den här och andra hjälpfunktioner finns i artikeln Samlingar: Skapa en Type-Safe-samling.

Kravspecifikation

Sidhuvud afxtempl.h

DumpElements

Tillhandahåller strömorienterade diagnostiska utdata i textform för elementen i samlingen när de åsidosätts.

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

Parameterar

domänkontrollant
Dumpkontext för dumpningselement.

TYP
Mallparameter som anger typ av element.

pElements
Pekare till de element som ska dumpas.

nCount
Antal element som ska dumpas.

Anmärkningar

Funktionerna CArray::Dump, CList::Dumpoch CMap::Dump anropar detta om dumpens djup är större än 0.

Standardimplementeringen gör ingenting. Om elementen i samlingen härleds från CObjectitererar åsidosättningen vanligtvis genom samlingens element och anropar Dump för varje element i tur och ordning.

Kravspecifikation

Sidhuvud afxtempl.h

HashKey

Beräknar ett hash-värde för den angivna nyckeln.

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

Parameterar

ARG_KEY
Mallparameter som anger den datatyp som används för att komma åt kartnycklar.

nyckel
Nyckeln vars hashvärde ska beräknas.

Returvärde

Nyckelns hashvärde.

Anmärkningar

Den här funktionen anropas direkt av CMap::RemoveKey och indirekt av CMap::Lookup och CMap::operator[].

Standardimplementeringen skapar ett hash-värde genom att flytta nyckeln åt höger med fyra positioner. Åsidosätt den här funktionen så att den returnerar hash-värden som är lämpliga för ditt program.

Exempel

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

Kravspecifikation

Sidhuvud afxtempl.h

SerializeElements

CArray, CList och CMap anropar den här funktionen för att serialisera element.

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

Parameterar

TYP
Mallparameter som anger typ av element.

Ar
Ett arkivobjekt att arkivera till eller från.

pElements
Pekare mot de element som arkiveras.

nCount
Antal element som arkiveras

Anmärkningar

Standardimplementeringen läser eller skriver lite.

Information om hur du implementerar den här och andra hjälpfunktioner finns i artikeln Samlingar: Skapa en Type-Safe-samling.

Exempel

Se exemplet i artikeln Samlingar: Skapa en Type-Safe samling.

Kravspecifikation

Sidhuvud afxtempl.h

Se även

makron och globala
CMap-klass
CList-klass
CArray-klass