共用方式為


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

CComObjectRootEx

IEnumOnSTLImpl

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 與型別搭配使用列舉值物件。

請參閱

參考

IEnumOnSTLImpl

CComObjectRootEx 類別

CComObjectThreadModel

IEnumOnSTLImpl 類別

概念

ATLCollections 範例:示範 ICollectionOnSTLImpl、CComEnumOnSTL 和自訂複製原則類別

其他資源

ATL 類別概觀