CComEnumOnSTL クラス
このクラスは、C++ 標準ライブラリ コレクションに基づいて COM 列挙子オブジェクトを定義します。
構文
template <class Base,
const IID* piid, class T, class Copy, class CollType, class ThreadModel = CComObjectThreadModel>
class ATL_NO_VTABLE CComEnumOnSTL : public IEnumOnSTLImpl<Base, piid,
T,
Copy,
CollType>,
public CComObjectRootEx<ThreadModel>
パラメーター
Base
COM 列挙子です。 例については、IEnumString に関する記事を参照してください。
piid
列挙子インターフェイスのインターフェイス ID へのポインター。
T
列挙子インターフェイスによって公開される項目の型。
コピー
コピー ポリシー クラス。
CollType
C++ 標準ライブラリ コンテナー クラス。
解説
CComEnumOnSTL
では、C++ 標準ライブラリ コレクションに基づいて COM 列挙子オブジェクトを定義します。 このクラスは独自で使うことも、ICollectionOnSTLImpl と組み合わせて使うこともできます。 このクラスを使うための一般的な手順を次に示します。 詳細については、「ATL コレクションと列挙子」を参照してください。
ICollectionOnSTLImpl と共にこのクラスを使う場合:
このクラスの特殊化に
typedef
を使用します。ICollectionOnSTLImpl
の特殊化で最後のテンプレート引数としてそのtypedef
を使います。
例については、「ATL コレクションと列挙子」を参照してください。
ICollectionOnSTLImpl とは無関係にこのクラスを使う場合:
このクラスの特殊化に
typedef
を使用します。CComObject
の特殊化でテンプレート引数としてそのtypedef
を使います。CComObject
特殊化のインスタンスを作成します。IEnumOnSTLImpl::Init を呼び出して、列挙子オブジェクトを初期化します。
クライアントに列挙子インターフェイスを返します。
継承階層
CComObjectRootBase
Base
CComEnumOnSTL
要件
ヘッダー: atlcom.h
例
次に示すコードは、列挙子オブジェクトの作成と初期化を処理するジェネリック関数を示しています。
template <class EnumType, class CollType>
HRESULT CreateSTLEnumerator(IUnknown** ppUnk, IUnknown* pUnkForRelease,
CollType& collection)
{
if (ppUnk == NULL)
return E_POINTER;
*ppUnk = NULL;
CComObject<EnumType>* pEnum = NULL;
HRESULT hr = CComObject<EnumType>::CreateInstance(&pEnum);
if (FAILED(hr))
return hr;
hr = pEnum->Init(pUnkForRelease, collection);
if (SUCCEEDED(hr))
hr = pEnum->QueryInterface(ppUnk);
if (FAILED(hr))
delete pEnum;
return hr;
} // CreateSTLEnumerator
次に示すように、この関数テンプレートを使用して、コレクション インターフェイスの _NewEnum
プロパティを実装できます。
typedef CComEnumOnSTL<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT>,
std::vector<CComVariant> > VarVarEnum;
class ATL_NO_VTABLE CVariantCollection :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CVariantCollection, &CLSID_VariantCollection>,
public IDispatchImpl<IVariantCollection, &IID_IVariantCollection, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
std::vector<CComVariant> m_vec;
STDMETHOD(get__NewEnum)(IUnknown** ppUnk)
{
return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec);
}
// Remainder of class declaration omitted.
このコードでは、IEnumVariant
インターフェイスを使用して、CComVariant
のベクトルを公開する CComEnumOnSTL
の typedef
を作成します。 CVariantCollection
クラスは、シンプルに CreateSTLEnumerator
を特殊化して、この型の列挙子オブジェクトを操作できるようにします。
関連項目
IEnumOnSTLImpl
ATLCollections サンプル: ICollectionOnSTLImpl、CComEnumOnSTL、カスタム コピー ポリシー クラスの使用例
クラスの概要
CComObjectRootEx クラス
CComObjectThreadModel
IEnumOnSTLImpl クラス