Sdílet prostřednictvím


Třída CComEnumOnSTL

Tato třída definuje čítače výčtu objektu COM založena kolekci STL.

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 >

Parametry

  • Base
    Čítač výčtu COM (IEnumXXXX) rozhraní.

  • piid
    Ukazatel na ID rozhraní čítač rozhraní.

  • T
    Typ položky prezentována čítač rozhraní.

  • Copy
    A kopie zásady třídy.

  • CollType
    Třída kontejneru STL.

Poznámky

CComEnumOnSTLdefinuje objekt enumerator COM založena kolekci STL.Tato třída lze použít samostatně nebo ve spojení s ICollectionOnSTLImpl.Typické kroky pro používání této třídy jsou uvedeny níže.Další informace naleznete v tématu kolekce ATL a čítače výčtu.

Pomocí této třídy ICollectionOnSTLImpl:

  • typedefspecializace této třídy.

  • Použití typedef jako argument konečné šablony v specializace z ICollectionOnSTLImpl .

Viz kolekce ATL a čítače výčtu příklad.

Pomocí této třídy nezávisle na ICollectionOnSTLImpl:

  • typedefspecializace této třídy.

  • Použití typedef jako argument šablony v specializace z CComObject .

  • Vytvořit instanci CComObject specializace.

  • Inicializovat objekt enumerator voláním IEnumOnSTLImpl::Init.

  • Čítač rozhraní vrátíte klientovi.

Hierarchii dědičnosti

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Požadavky

Záhlaví: atlcom.h

Příklad

Kód níže obsahuje obecné funkce pro zpracování vytvoření a inicializace objektu 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

Tato funkce šablony lze použít k implementaci _NewEnum vlastnosti rozhraní sběru, jak je ukázáno níže:

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.

Tento kód vytvoří typedef pro CComEnumOnSTL poskytuje vektor CComVariant s pomocí IEnumVariant rozhraní.CVariantCollection třídy jednoduše specializuje CreateSTLEnumerator práce s objekty tohoto typu enumerator.

Viz také

Referenční dokumentace

IEnumOnSTLImpl

Třída CComObjectRootEx

CComObjectThreadModel

Třída IEnumOnSTLImpl

Koncepty

ATLCollections vzorku: ukazuje ICollectionOnSTLImpl, CComEnumOnSTL a vlastní kopii zásady třídy

Další zdroje

Přehled třídy ATL