CComEnumOnSTL选件类
此选件类定义了基于STL集合的COM enumerator对象。
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 >
参数
备注
CComEnumOnSTL 定义基于STL集合的COM enumerator对象。此选件类可以使用自己的或与 ICollectionOnSTLImpl结合使用。典型的步骤来使用此选件类下面概述。有关更多信息,请参见 ATL 集合和枚举数。
使用ICollectionOnSTLImpl的此选件类:
typedef 此选件类的专用化。
使用 typedef 为最终模板参数在 ICollectionOnSTLImpl的专用化。
有关示例 ATL 集合和枚举数 参见。
独立ICollectionOnSTLImpl使用此选件类:
typedef 此选件类的专用化。
使用 typedef 用作模板参数在 CComObject的专用化。
创建 CComObject 专用化的实例。
通过调用 IEnumOnSTLImpl::Init初始化枚举数对象。
返回枚举数接口到客户端。
继承层次结构
CComObjectRootBase
Base
CComEnumOnSTL
要求
Header: atlcom.h
示例
如下所示的代码提供泛型函数处理enumerator对象的创建和初始化:
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 与此类型一起使用枚举数对象。
请参见
参考
概念
ATLCollections示例:演示ICollectionOnSTLImpl、CComEnumOnSTL和自定义复制策略类选件