IEnumOnSTLImpl クラス
このクラスでは、C++ 標準ライブラリ コレクションに基づいて列挙子インターフェイスを定義します。
構文
template <class Base,
const IID* piid, class T, class Copy, class CollType>
class ATL_NO_VTABLE IEnumOnSTLImpl : public Base
パラメーター
Base
COM 列挙子です。 例については、IEnumString に関する記事を参照してください。
piid
列挙子インターフェイスのインターフェイス ID へのポインター。
T
列挙子インターフェイスによって公開される項目の型。
コピー
コピー ポリシー クラス。
CollType
C++ 標準ライブラリ コンテナー クラス。
メンバー
パブリック メソッド
名前 | 説明 |
---|---|
IEnumOnSTLImpl::Clone | Clone の実装。 |
IEnumOnSTLImpl::Init | 列挙子を初期化します。 |
IEnumOnSTLImpl::Next | Next の実装。 |
IEnumOnSTLImpl::Reset | Reset の実装。 |
IEnumOnSTLImpl::Skip | Skip の実装。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
IEnumOnSTLImpl::m_iter | コレクション内の列挙子の現在位置を表す反復子。 |
IEnumOnSTLImpl::m_pcollection | 列挙する項目を保持する C++ 標準ライブラリ コンテナーへのポインター。 |
IEnumOnSTLImpl::m_spUnk | コレクションを提供するオブジェクトの IUnknown ポインター。 |
解説
IEnumOnSTLImpl
では、列挙される項目が C++ 標準ライブラリ コンテナーに格納される COM 列挙子インターフェイスの実装を提供します。 このクラスは、配列に基づく列挙子インターフェイスの実装を提供する CComEnumImpl クラスに似ています。
Note
と の違いの詳細については、「CComEnumImpl
CComEnumImpl::InitIEnumOnSTLImpl
」を参照してください。
通常、このインターフェイスの実装から派生させて、独自の列挙子クラスを作成する必要は ''ありません''。 C++ 標準ライブラリ コンテナーに基づいて ATL 提供の列挙子を使用する場合は、CComEnumOnSTL のインスタンスを作成するか、ICollectionOnSTLImpl から派生させて列挙子を返すコレクション クラスを作成する方が一般的です。
しかし、カスタム列挙子 (列挙子インターフェイスに加えてインターフェイスを公開するものなど) を指定する必要がある場合は、このクラスから派生させることができます。 このような状況では、独自の実装を指定するために、Clone メソッドをオーバーライドする必要がある可能性があります。
継承階層
Base
IEnumOnSTLImpl
要件
ヘッダー: atlcom.h
IEnumOnSTLImpl::Init
列挙子を初期化します。
HRESULT Init(
IUnknown* pUnkForRelease,
CollType& collection);
パラメーター
pUnkForRelease
[入力] 列挙子の有効期間中に存続する必要があるオブジェクトの IUnknown
ポインター。 そのようなオブジェクトが存在しない場合は、NULL を渡します。
collection
列挙する項目を保持する C++ 標準ライブラリ コンテナーへの参照。
戻り値
標準の HRESULT 値。
解説
Init
に、別のオブジェクトに保持されているコレクションへの参照を渡す場合は、pUnkForRelease パラメーターを使用して、列挙子が必要とする限り、オブジェクトとそれが保持するコレクションを使用できるようにします。
列挙子インターフェイスへのポインターをクライアントに渡す前に、このメソッドを呼び出す必要があります。
IEnumOnSTLImpl::Clone
このメソッドでは、CComEnumOnSTL
型のオブジェクトを作成し、現在のオブジェクトで使用されているのと同じコレクションと列挙子で初期化し、新しく作成されたオブジェクトのインターフェイスを返すことで、Clone メソッドの実装を提供します。
STDMETHOD(Clone)(Base** ppEnum);
パラメーター
ppEnum
[出力] 現在の列挙子から複製され、新しく作成されたオブジェクトの列挙子インターフェイス。
戻り値
標準の HRESULT 値。
IEnumOnSTLImpl::m_spUnk
コレクションを提供するオブジェクトの IUnknown
ポインター。
CComPtr<IUnknown> m_spUnk;
解説
このスマート ポインターでは、IEnumOnSTLImpl::Init に渡されるオブジェクトへの参照が維持されます。これにより、列挙子の有効期間中は確実に存続することになります。
IEnumOnSTLImpl::m_pcollection
このメンバーは、列挙子インターフェイスの実装を駆動するデータを提供するコレクションを指します。
CollType* m_pcollection;
解説
このメンバーは、IEnumOnSTLImpl::Init への呼び出しによって初期化されます。
IEnumOnSTLImpl::m_iter
このメンバーは、コレクション内の現在位置をマークし、後続の要素に移動するために使用される反復子を保持します。
CollType::iterator m_iter;
IEnumOnSTLImpl::Next
このメソッドでは、Next メソッドの実装を提供します。
STDMETHOD(Next)(
ULONG celt,
T* rgelt,
ULONG* pceltFetched);
パラメーター
celt
[入力] 要求された要素の数。
rgelt
[出力] 要素が格納される配列。
pceltFetched
[出力] rgelt で実際に返される要素の数。 celt より少ない数の要素がリストに残っている場合、これは celt より小さくなることがあります。
戻り値
標準の HRESULT 値。
IEnumOnSTLImpl::Reset
このメソッドでは、Reset メソッドの実装を提供します。
STDMETHOD(Reset)(void);
戻り値
標準の HRESULT 値。
IEnumOnSTLImpl::Skip
このメソッドでは、Skip メソッドの実装を提供します。
STDMETHOD(Skip)(ULONG celt);
パラメーター
celt
[in] スキップする要素数。
戻り値
標準の HRESULT 値。