CComEnumOnSTL 類別
這個類別會定義以 STL 集合的 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 列舉值 (IEnumXXXX) 介面。piid
out 列舉值介面的介面 ID 的指標。T
列舉值介面公開的項目型別。Copy
複製原則 類別。CollType
STL 容器類別。
備註
CComEnumOnSTL 定義根據 STL 集合的 COM 列舉值物件。這個類別可單獨使用或 ICollectionOnSTLImpl一起使用。的一般步驟。使用這個類別會在中說明。如需詳細資訊,請參閱 ATL 集合和列舉值。。
使用 ICollectionOnSTLImpl 中這個類別:
typedef 此類別的特製化。
使用 typedef 做為最終的樣板引數在 ICollectionOnSTLImpl的特製化。
如需範例 ATL 集合和列舉值。 參閱。
獨立 ICollectionOnSTLImpl 使用這個類別:
typedef 此類別的特製化。
使用 typedef 當做樣板引數使用。 CComObject的特製化。
建立 CComObject 特製化的執行個體。
藉由呼叫 IEnumOnSTLImpl::Init初始化列舉值物件。
傳回列舉值介面給用戶端。
繼承階層架構
CComObjectRootBase
Base
CComEnumOnSTL
需求
Header: 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 介面公開 CComVariants 向量的這個程式碼會建立 CComEnumOnSTL 的 typedef 。CVariantCollection 類別特製化 CreateSTLEnumerator 與型別搭配使用列舉值物件。
請參閱
參考
概念
ATLCollections 範例:示範 ICollectionOnSTLImpl、CComEnumOnSTL 和自訂複製原則類別