Pomocné rutiny třídy kolekce
Třídy CMap
kolekce , CList
a CArray
používat šablonované globální pomocné funkce pro takové účely jako porovnání, kopírování a serializace prvků. Jako součást implementace tříd založených na CMap
, CList
a CArray
, musíte tyto funkce podle potřeby přepsat pomocí verzí přizpůsobených typu dat uložených v mapě, seznamu nebo poli. Informace o přepsání pomocných funkcí, jako SerializeElements
je například , naleznete v článku Kolekce: Jak vytvořit typ-bezpečné kolekce. Mějte na paměti, že ConstructElements
jsou DestructElements
zastaralé.
Knihovna tříd Microsoft Foundation poskytuje následující globální funkce v afxtempl.h, které vám pomůžou přizpůsobit třídy kolekcí:
Pomocné rutiny třídy kolekce
Název | Popis |
---|---|
CompareElements | Určuje, zda jsou prvky stejné. |
CopyElements | Zkopíruje prvky z jednoho pole do druhého. |
DumpElements | Poskytuje výstup diagnostiky orientovaný na stream. |
HashKey | Vypočítá hashovací klíč. |
SerializeElements | Ukládá nebo načítá elementy do archivu nebo z archivu. |
CompareElements
Volal přímo CList::Find
a nepřímo a CMap::Lookup
CMap::operator[]
.
template<class TYPE, class ARG_TYPE>
BOOL AFXAPI
CompareElements(
const TYPE* pElement1,
const ARG_TYPE* pElement2);
Parametry
TYP
Typ prvního prvku, který se má porovnat.
pElement1
Ukazatel na první prvek, který se má porovnat.
ARG_TYPE
Typ druhého prvku, který se má porovnat.
pElement2
Ukazatel na druhý prvek, který se má porovnat.
Návratová hodnota
Nenulové, pokud se objekt, na který odkazuje pElement1 , rovná objektu, na který odkazuje pElement2; jinak 0.
Poznámky
Volání CMap
používají CMap
parametry šablony KEY a ARG_KEY.
Výchozí implementace vrátí výsledek porovnání *pElement1 a *pElement2. Tuto funkci přepište tak, aby porovnávala prvky způsobem, který je vhodný pro vaši aplikaci.
Jazyk C++ definuje relační operátor ( ==
) pro jednoduché typy (char
, int
, float
atd.), ale nedefinuje relační operátor pro třídy a struktury. Pokud chcete použít CompareElements
nebo vytvořit instanci jedné z tříd kolekce, které ji používají, musíte buď definovat relační operátor nebo přetížení CompareElements
s verzí, která vrací příslušné hodnoty.
Požadavky
Hlavička: afxtempl.h
CopyElements
Tato funkce je volána přímo CArray ::Append a CArray::Copy.
template<class TYPE>
void AFXAPI CopyElements(
TYPE* pDest,
const TYPE* pSrc,
INT_PTR nCount);
Parametry
TYP
Parametr šablony určující typ prvků, které se mají zkopírovat.
pDest
Ukazatel na cíl, kam se prvky zkopírují.
pSrc
Ukazatel na zdroj prvků, které se mají zkopírovat.
nCount
Počet prvků, které se mají zkopírovat.
Poznámky
Výchozí implementace používá k provedení operace kopírování operátor jednoduchého přiřazení ( = ). Pokud typ, který se kopíruje, nemá přetížený operátor=, provede výchozí implementace bitovou kopii.
Informace o implementaci této a dalších pomocných funkcí najdete v článku Kolekce: Vytvoření kolekce typu bezpečné.
Požadavky
Hlavička afxtempl.h
DumpElements
Poskytuje diagnostický výstup orientovaný na stream v textové podobě pro prvky kolekce při přepsání.
template<class TYPE>
void AFXAPI DumpElements(
CDumpContext& dc,
const TYPE* pElements,
INT_PTR nCount);
Parametry
stejnosměrný proud
Kontext výpisu paměti pro dumpingové prvky.
TYP
Parametr šablony určující typ prvků
pElements
Ukazatel na prvky, které se mají vyčíst.
nCount
Počet prvků, které mají být vypsané.
Poznámky
Funkce CArray::Dump
a CMap::Dump
, CList::Dump
volání, pokud hloubka výpisu je větší než 0.
Výchozí implementace nic nedělá. Pokud jsou prvky vaší kolekce odvozeny CObject
, přepsání obvykle iteruje prvky kolekce, volání Dump
pro každý prvek následně.
Požadavky
Hlavička afxtempl.h
HashKey
Vypočítá hodnotu hash pro daný klíč.
template<class ARG_KEY>
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY key);
Parametry
ARG_KEY
Parametr šablony určující datový typ použitý pro přístup ke klíčům map.
key
Klíč, jehož hodnota hash se má vypočítat.
Návratová hodnota
Hodnota hash klíče.
Poznámky
Tato funkce je volána přímo CMap::RemoveKey
a nepřímo pomocí CMap::Lookup
a CMap::operator[]
.
Výchozí implementace vytvoří hodnotu hash posunutím klíče doprava o čtyři pozice. Tuto funkci přepište tak, aby vracela hodnoty hash vhodné pro vaši aplikaci.
Příklad
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));
}
Požadavky
Hlavička afxtempl.h
SerializeElements
CArray, CList a CMap volají tuto funkci pro serializaci elementů.
template<class TYPE>
void AFXAPI SerializeElements(CArchive& ar, TYPE* pElements, INT_PTR nCount);
Parametry
TYP
Parametr šablony určující typ prvků
ar
Archivní objekt pro archivaci do nebo z.
pElements
Ukazatel na prvky, které se archivují.
nCount
Počet archivovaných prvků
Poznámky
Výchozí implementace provede bitové čtení nebo zápis.
Informace o implementaci této a dalších pomocných funkcí najdete v článku Kolekce: Vytvoření kolekce typu bezpečné.
Příklad
Podívejte se na příklad v článku Kolekce: Vytvoření kolekce typu bezpečné.
Požadavky
Hlavička afxtempl.h
Viz také
Makra a globální objekty
CMap – třída
CList – třída
CArray – třída