次の方法で共有


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

の違いの詳細については、「CComEnumImplCComEnumImpl::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 値。

関連項目

クラスの概要