コレクション クラスのヘルパー
コレクション クラス CMap
。 CList
要素 CArray
の比較、コピー、シリアル化などの目的で、テンプレート化されたグローバル ヘルパー関数を使用します。 にCList
基づくCMap
クラスの実装の一環として、CArray
必要に応じて、マップ、リスト、または配列に格納されているデータの種類に合わせて調整されたバージョンで、これらの関数をオーバーライドする必要があります。 ヘルパーSerializeElements
関数のオーバーライドの詳細については、「コレクション: 型セーフ コレクションを作成する方法」を参照してください。 非推奨 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
コピーする要素の数。
解説
既定の実装では、単純な代入演算子 ( = ) を使用してコピー操作を実行します。 コピーされる型にオーバーロードされた演算子 = がない場合、既定の実装ではビットごとのコピーが実行されます。
このヘルパー関数とその他のヘルパー関数の実装については、「コレクション: 型セーフ コレクションを作成する方法」を参照してください。
必要条件
ヘッダー afxtempl.h
DumpElements
オーバーライドされた場合に、コレクションの要素のテキスト形式でストリーム指向の診断出力を提供します。
template<class TYPE>
void AFXAPI DumpElements(
CDumpContext& dc,
const TYPE* pElements,
INT_PTR nCount);
パラメーター
dc
要素をダンプするためのダンプ コンテキスト。
TYPE
要素の型を指定するテンプレート パラメーター。
pElements
ダンプする要素へのポインター。
nCount
ダンプする要素の数。
解説
CList::Dump
、および関数はCArray::Dump
、CMap::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::Lookup
CMap::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
CArray、 CList、および CMap は、この関数を呼び出して要素をシリアル化します。
template<class TYPE>
void AFXAPI SerializeElements(CArchive& ar, TYPE* pElements, INT_PTR nCount);
パラメーター
TYPE
要素の型を指定するテンプレート パラメーター。
ar
アーカイブの送受信を行うアーカイブ オブジェクト。
pElements
アーカイブされる要素へのポインター。
nCount
アーカイブされる要素の数
解説
既定の実装では、ビットごとの読み取りまたは書き込みが行われます。
このヘルパー関数とその他のヘルパー関数の実装については、「コレクション: 型セーフ コレクションを作成する方法」を参照してください。
例
「コレクション: Type-セーフ コレクションを作成する方法」の記事の例を参照してください。
必要条件
ヘッダー afxtempl.h
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示