コレクション クラスのヘルパー
コレクション クラス CMap
、 CList
、および CArray
は、要素の比較、コピー、シリアル化などの目的でテンプレート化されたグローバル ヘルパー関数を使用します。 CMap
、CList
、CArray
に基づくクラスの実装の一環として、マップ、リスト、または配列に格納されているデータの種類に合わせて調整されたバージョンで、必要に応じてこれらの関数をオーバーライドする必要があります。 SerializeElements
などのヘルパー関数のオーバーライドの詳細については、「Collections: Type-Safe コレクションを作成する方法」を参照してください。 ConstructElements
とDestructElements
は非推奨になっていることに注意してください。
Microsoft Foundation クラス ライブラリには、コレクション クラスのカスタマイズに役立つ次のグローバル関数が afxtempl.h に用意されています。
コレクション クラスのヘルパー
名前 | 説明 |
---|---|
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);
パラメーター
TYPE
比較する最初の要素の型。
pElement1
比較する最初の要素へのポインター。
ARG_TYPE
比較する 2 番目の要素の型。
pElement2
比較する 2 番目の要素へのポインター。
戻り値
pElement1 が指すオブジェクトが pElement2 が指すオブジェクトと等しい場合は 0 以外。それ以外の場合は 0。
解説
CMap
呼び出しでは、CMap
テンプレート パラメーター KEYとARG_KEYを使用します。
既定の実装では、 *pElement1 と *pElement2 の比較結果が返されます。 アプリケーションに適した方法で要素を比較するように、この関数をオーバーライドします。
C++ 言語は、単純型 (char
、int
、float
など) の比較演算子 (==
) を定義しますが、クラスと構造体の比較演算子は定義しません。 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::Dump
、 CList::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::Lookup
と CMap::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
CArray、 CList、および 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