集合類別 Helper
集合類別 CMap
、 CList
和 CArray
會針對比較、複製和串行化專案等用途,使用樣板化全域協助程式函式。 作為以、 CList
和 CArray
為基礎的CMap
類別實作的一部分,您必須視需要使用針對對應、清單或數位中所儲存數據類型所量身打造的版本覆寫這些函式。 如需覆寫這類SerializeElements
協助程式函式的資訊,請參閱集合:如何建立類型安全集合一文。 請注意, ConstructElements
和 DestructElements
已被取代。
Microsoft Foundation 類別庫在 afxtempl.h 中提供下列全域函式,以協助您自定義集合類別:
集合類別 Helper
名稱 | 描述 |
---|---|
CompareElements | 指出專案是否相同。 |
CopyElements | 將專案從一個陣列複製到另一個陣列。 |
DumpElements | 提供數據流導向診斷輸出。 |
HashKey | 計算哈希金鑰。 |
SerializeElements | 儲存或擷取封存中的專案。 |
CompareElements
直接由 CList::Find
和間接呼叫 CMap::Lookup
和 CMap::operator[]
。
template<class TYPE, class ARG_TYPE>
BOOL AFXAPI
CompareElements(
const TYPE* pElement1,
const ARG_TYPE* pElement2);
參數
類型
要比較之第一個項目的類型。
pElement1
要比較之第一個專案的指標。
ARG_TYPE
要比較之第二個項目的類型。
pElement2
要比較之第二個專案的指標。
傳回值
如果 pElement1 所指向的物件等於 pElement2 所指向的物件,則為非零;否則為 0。
備註
呼叫會CMap
CMap
使用範本參數KEY和 ARG_KEY。
默認實作會傳回比較 *pElement1 和 *pElement2 的結果。 覆寫此函式,讓它以適合您應用程式的方式比較專案。
C++語言會定義簡單型別的比較運算子 (==
char
、、 int
float
等),但不會定義類別和結構的比較運算符。 如果您想要使用 CompareElements
或 來具現化其中一個使用該類別的集合類別,您必須使用傳回適當值的版本來定義比較運算符或多載 CompareElements
。
需求
Header: afxtempl.h
CopyElements
此函式是由 CArray::Append 和 CArray::Copy 直接呼叫。
template<class TYPE>
void AFXAPI CopyElements(
TYPE* pDest,
const TYPE* pSrc,
INT_PTR nCount);
參數
類型
指定要複製之項目的類型的樣板參數。
pDest
指向項目複製目的地的指標。
pSrc
指向要複製項目之來源的指標。
nCount
要複製項目的數目。
備註
預設實作會使用簡單指派運算子 ( = ) 來執行複製作業。 如果要複製的類型沒有多載的 operator=,則預設實作會執行位元複製。
如需實作此函式和其他協助程式函式的資訊,請參閱集合:如何建立類型安全集合一文。
需求
標頭 afxtempl.h
DumpElements
覆寫時,會以文字形式提供集合元素的數據流導向診斷輸出。
template<class TYPE>
void AFXAPI DumpElements(
CDumpContext& dc,
const TYPE* pElements,
INT_PTR nCount);
參數
dc
傾印項目的傾印內容。
類型
指定專案類型的樣板參數。
pElements
要傾印之專案的指標。
nCount
要傾印的項目數目。
備註
如果 CArray::Dump
傾印深度大於 0, 則 、 CList::Dump
和 CMap::Dump
函式會呼叫這個 。
預設實作不做任何動作。 如果集合的元素衍生自 CObject
,則覆寫通常會逐一查看集合的 元素, Dump
接著呼叫每個元素。
需求
標頭 afxtempl.h
HashKey
計算指定索引鍵的哈希值。
template<class ARG_KEY>
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY key);
參數
ARG_KEY
範本參數,指定用來存取地圖索引鍵的數據類型。
key
要計算其哈希值的索引鍵。
傳回值
索引鍵的哈希值。
備註
這個函式是由和間接 CMap::RemoveKey
CMap::Lookup
CMap::operator[]
呼叫。
默認實作會藉由將索引鍵向右移四個位置來建立哈希值。 覆寫此函式,使其傳回適合您應用程式的哈希值。
範例
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));
}
需求
標頭 afxtempl.h
SerializeElements
CArray、 CList 和 CMap 會呼叫此函式來串行化專案。
template<class TYPE>
void AFXAPI SerializeElements(CArchive& ar, TYPE* pElements, INT_PTR nCount);
參數
類型
指定專案類型的樣板參數。
ar
要封存至或從中封存的封存物件。
pElements
要封存之專案的指標。
nCount
正在封存的項目數目
備註
默認實作會執行位讀取或寫入。
如需實作此函式和其他協助程式函式的資訊,請參閱集合:如何建立類型安全集合一文。
範例
請參閱集合:如何建立類型安全集合一文中的範例。
需求
標頭 afxtempl.h