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

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

解説

呼び出しでは CMapCMap テンプレート パラメーター KEYARG_KEYが使用されます

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

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

必要条件

ヘッダー: afxtempl.h

CopyElements

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

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

パラメーター

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

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

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

nCount
コピーする要素の数。

解説

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

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

必要条件

ヘッダー afxtempl.h

DumpElements

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

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

パラメーター

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

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

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

nCount
ダンプする要素の数。

解説

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

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

必要条件

ヘッダー afxtempl.h

HashKey

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

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

パラメーター

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

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

戻り値

キーのハッシュ値。

解説

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

既定の実装では、キーを 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));
}

必要条件

ヘッダー afxtempl.h

SerializeElements

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

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

パラメーター

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

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

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

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

解説

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

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

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

必要条件

ヘッダー afxtempl.h

関連項目

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