コレクション クラスのヘルパー

コレクション クラス CMapCList、および CArray は、要素の比較、コピー、シリアル化などの目的でテンプレート化されたグローバル ヘルパー関数を使用します。 CMapCListCArrayに基づくクラスの実装の一環として、マップ、リスト、または配列に格納されているデータの種類に合わせて調整されたバージョンで、必要に応じてこれらの関数をオーバーライドする必要があります。 SerializeElementsなどのヘルパー関数のオーバーライドの詳細については、「Collections: Type-Safe コレクションを作成する方法」を参照してください。 ConstructElementsDestructElementsは非推奨になっていることに注意してください。

Microsoft Foundation クラス ライブラリには、コレクション クラスのカスタマイズに役立つ次のグローバル関数が afxtempl.h に用意されています。

コレクション クラスのヘルパー

名前 説明
CompareElements 要素が同じかどうかを示します。
CopyElements ある配列から別の配列に要素をコピーします。
DumpElements ストリーム指向の診断出力を提供します。
HashKey ハッシュ キーを計算します。
SerializeElements アーカイブとの間で要素を格納または取得します。

CompareElements

CList::Findによって直接呼び出され、CMap::LookupCMap::operator[]によって間接的に呼び出されます。

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

パラメーター

TYPE
比較する最初の要素の型。

pElement1
比較する最初の要素へのポインター。

ARG_TYPE
比較する 2 番目の要素の型。

pElement2
比較する 2 番目の要素へのポインター。

戻り値

pElement1 が指すオブジェクトが pElement2 が指すオブジェクトと等しい場合は 0 以外。それ以外の場合は 0。

解説

CMap呼び出しでは、CMap テンプレート パラメーター KEYARG_KEYを使用します。

既定の実装では、 *pElement1*pElement2 の比較結果が返されます。 アプリケーションに適した方法で要素を比較するように、この関数をオーバーライドします。

C++ 言語は、単純型 (charintfloatなど) の比較演算子 (==) を定義しますが、クラスと構造体の比較演算子は定義しません。 CompareElementsを使用する場合、またはそれを使用するコレクション クラスの 1 つをインスタンス化する場合は、適切な値を返すバージョンで比較演算子またはオーバーロードCompareElementsを定義する必要があります。

要件

ヘッダー: afxtempl.h

CopyElements

この関数は、 CArray::Append および CArray::Copy によって直接呼び出されます。

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

パラメーター

TYPE
コピーする要素の型を指定するテンプレート パラメーター。

pDest
要素のコピー先へのポインター。

pSrc
コピーする要素のソースへのポインター。

nCount
コピーする要素の数。

解説

既定の実装では、単純な代入演算子 ( = ) を使用してコピー操作を実行します。 コピーされる型にオーバーロードされた演算子 = がない場合、既定の実装ではビットごとのコピーが実行されます。

このヘルパー関数とその他のヘルパー関数の実装については、「 Collections: Type-Safe コレクションを作成する方法」の記事を参照してください。

要件

Header afxtempl.h

DumpElements

オーバーライドされた場合に、コレクションの要素のテキスト形式でストリーム指向の診断出力を提供します。

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

パラメーター

dc
要素をダンプするためのダンプ コンテキスト。

TYPE
要素の型を指定するテンプレート パラメーター。

pElements
ダンプする要素へのポインター。

nCount
ダンプする要素の数。

解説

ダンプの深さが 0 より大きい場合、 CArray::DumpCList::Dump、および CMap::Dump 関数はこれを呼び出します。

既定の実装では、何も行われません。 コレクションの要素が CObjectから派生している場合、オーバーライドは通常、コレクションの要素を反復処理し、各要素に対して Dump を呼び出します。

要件

Header afxtempl.h

HashKey

指定されたキーのハッシュ値を計算します。

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

パラメーター

ARG_KEY
マップ キーへのアクセスに使用するデータ型を指定するテンプレート パラメーター。

キー
ハッシュ値を計算するキー。

戻り値

キーのハッシュ値。

解説

この関数は、 CMap::RemoveKey によって直接呼び出され、 CMap::LookupCMap::operator[]によって間接的に呼び出されます。

既定の実装では、 key 右に 4 つの位置をシフトすることでハッシュ値が作成されます。 アプリケーションに適したハッシュ値を返すように、この関数をオーバーライドします。

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

要件

Header afxtempl.h

SerializeElements

CArrayCList、および CMap この関数を呼び出して要素をシリアル化します。

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

パラメーター

TYPE
要素の型を指定するテンプレート パラメーター。

ar
アーカイブの送受信を行うアーカイブ オブジェクト。

pElements
アーカイブされる要素へのポインター。

nCount
アーカイブされる要素の数

解説

既定の実装では、ビットごとの読み取りまたは書き込みが行われます。

このヘルパー関数とその他のヘルパー関数の実装については、「 Collections: Type-Safe コレクションを作成する方法」の記事を参照してください。

記事「 Collections: Type-Safe コレクションを作成する方法の例を参照してください。

要件

Header afxtempl.h

関連項目

マクロとグローバル
CMap クラス
CList クラス
CArray クラス