共用方式為


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
列舉值介面之介面標識碼的指標。

T
列舉值介面所公開的項目類型。

複製
複製 原則 類別。

CollType
標準連結庫容器類別C++。

備註

CComEnumOnSTL 根據標準連結庫集合C++定義 COM 列舉值物件。 這個類別可以單獨使用,也可以搭配 ICollectionOnSTLImpl 使用。 使用這個類別的一般步驟如下所述。 如需詳細資訊,請參閱 ATL 集合和列舉值

若要搭配 ICollectionOnSTLImpl 使用此類別:

  • typedef 這個類別的特製化。

  • typedef在特製化 ICollectionOnSTLImpl中使用 作為最後一個樣板自變數。

如需範例,請參閱 ATL 集合和列舉值

若要獨立於 ICollectionOnSTLImpl 使用這個類別:

  • typedef 這個類別的特製化。

  • typedef使用 做為 特製化的CComObject樣板自變數。

  • 建立特製化的實例 CComObject

  • 呼叫 IEnumOnSTLImpl::Init,初始化列舉值物件。

  • 將列舉值介面傳回用戶端。

繼承階層架構

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

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.

此程式代碼會typedef建立 ,CComEnumOnSTL其會透過 IEnumVariant 介面公開的CComVariant向量。 類別 CVariantCollection 只會專門 CreateSTLEnumerator 處理此類型的列舉值物件。

另請參閱

IEnumOnSTLImpl
ATLCollections 範例:示範 ICollectionOnSTLImpl、CComEnumOnSTL 和自定義複製原則類別
類別概觀
CComObjectRootEx 類別
CComObjectThreadModel
IEnumOnSTLImpl 類別