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