Udostępnij za pośrednictwem


Pomocnicy klasy kolekcji

Klasy CMapkolekcji , CListi CArray używają szablonów globalnych funkcji pomocnika do takich celów, jak porównywanie, kopiowanie i serializowanie elementów. W ramach implementacji klas opartych na CMapelementach , CListi i CArraynależy zastąpić te funkcje w razie potrzeby wersjami dostosowanymi do typu danych przechowywanych na mapie, liście lub tablicy. Aby uzyskać informacje na temat zastępowania funkcji pomocnika, takich jak SerializeElements, zobacz artykuł Kolekcje: Jak utworzyć kolekcję typu Sejf. Należy pamiętać, że ConstructElements i DestructElements zostały przestarzałe.

Biblioteka klas programu Microsoft Foundation udostępnia następujące funkcje globalne w pliku afxtempl.h, które ułatwiają dostosowywanie klas kolekcji:

Pomocnicy klasy kolekcji

Nazwa/nazwisko opis
CompareElements Wskazuje, czy elementy są takie same.
CopyElements Kopiuje elementy z jednej tablicy do innej.
DumpElements Udostępnia dane wyjściowe diagnostyczne zorientowane na strumień.
HashKey Oblicza klucz skrótu.
Serializowanie elementów Przechowuje lub pobiera elementy do lub z archiwum.

CompareElements

Wywoływane bezpośrednio przez i pośrednio przez CList::FindCMap::Lookup i CMap::operator[].

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

Parametry

TYPU
Typ pierwszego elementu do porównania.

pElement1
Wskaźnik do pierwszego elementu do porównania.

ARG_TYPE
Typ drugiego elementu do porównania.

pElement2
Wskaźnik do drugiego elementu do porównania.

Wartość zwracana

Nonzero, jeśli obiekt wskazywany przez element pElement1 jest równy obiektowi wskazywane przez pElement2; w przeciwnym razie 0.

Uwagi

Wywołania CMap używają parametrów szablonu CMap KEY i ARG_KEY.

Domyślna implementacja zwraca wynik porównania *pElement1 i *pElement2. Zastąpi tę funkcję tak, aby porównała elementy w sposób odpowiedni dla aplikacji.

Język C++ definiuje operator porównania ( ==) dla typów prostych (char, int, floatitd.), ale nie definiuje operatora porównania dla klas i struktur. Jeśli chcesz użyć polecenia CompareElements lub utworzyć wystąpienie jednej z klas kolekcji, które go używają, musisz zdefiniować operator porównania lub przeciążyć CompareElements wersję zwracającą odpowiednie wartości.

Wymagania

Nagłówek: afxtempl.h

CopyElements

Ta funkcja jest wywoływana bezpośrednio przez CArray ::Append i CArray::Copy.

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

Parametry

TYPU
Parametr szablonu określający typ elementów do skopiowania.

PDest
Wskaźnik do miejsca docelowego, w którym zostaną skopiowane elementy.

Psrc
Wskaźnik do źródła elementów do skopiowania.

Ncount
Liczba elementów do skopiowania.

Uwagi

Domyślna implementacja używa prostego operatora przypisania ( = ) do wykonania operacji kopiowania. Jeśli skopiowany typ nie ma przeciążonego operatora=, domyślna implementacja wykonuje kopię bitową.

Aby uzyskać informacje na temat implementowania tych i innych funkcji pomocnika, zobacz artykuł Kolekcje: Jak utworzyć kolekcję typu Sejf.

Wymagania

Nagłówek afxtempl.h

DumpElements

Udostępnia dane wyjściowe diagnostyczne zorientowane na strumień w postaci tekstowej dla elementów kolekcji podczas zastępowania.

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

Parametry

Dc
Kontekst zrzutu dla elementów dumpingu.

TYPU
Parametr szablonu określający typ elementów.

pElements
Wskaźnik do elementów, które mają być po cenach dumpingowych.

Ncount
Liczba elementów do porzucania.

Uwagi

Funkcja CArray::Dump, CList::Dumpi CMap::Dump wywołuje to, jeśli głębokość zrzutu jest większa niż 0.

Domyślna implementacja nic nie robi. Jeśli elementy kolekcji pochodzą z CObjectelementu , przesłonięcia zwykle iterują elementy kolekcji, wywołując Dump poszczególne elementy z kolei.

Wymagania

Nagłówek afxtempl.h

HashKey

Oblicza wartość skrótu dla danego klucza.

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

Parametry

ARG_KEY
Parametr szablonu określający typ danych używany do uzyskiwania dostępu do kluczy mapy.

key
Klucz, którego wartość skrótu ma być obliczana.

Wartość zwracana

Wartość skrótu klucza.

Uwagi

Ta funkcja jest wywoływana bezpośrednio przez i pośrednio przez CMap::RemoveKeyCMap::Lookup i CMap::operator[].

Domyślna implementacja tworzy wartość skrótu, przesuwając klucz w prawo o cztery pozycje. Zastąpi tę funkcję, aby zwracała wartości skrótu odpowiednie dla aplikacji.

Przykład

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

Wymagania

Nagłówek afxtempl.h

Serializowanie elementów

CArray, CList i CMap wywołają tę funkcję, aby serializować elementy.

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

Parametry

TYPU
Parametr szablonu określający typ elementów.

Ar
Obiekt archiwum do zarchiwizowanego do lub z.

pElements
Wskaźnik do zarchiwizowanych elementów.

Ncount
Liczba zarchiwizowanych elementów

Uwagi

Domyślna implementacja wykonuje bitowy odczyt lub zapis.

Aby uzyskać informacje na temat implementowania tych i innych funkcji pomocnika, zobacz artykuł Kolekcje: Jak utworzyć kolekcję typu Sejf.

Przykład

Zobacz przykład w artykule Collections: How to Make a Type-Sejf Collection (Jak utworzyć kolekcję typu Sejf).

Wymagania

Nagłówek afxtempl.h

Zobacz też

Makra i globalne
Klasa CMap
Klasa CList
Klasa CArray