Udostępnij za pośrednictwem


Klasa CComEnumOnSTL

Ta klasa definiuje obiektu numeratora COM opartego na zbiorze 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
    Modułu wyliczającego COM (IEnumXXXX) interfejsu.

  • piid
    Wskaźnik na identyfikator interfejsu interfejsu modułu wyliczającego.

  • T
    Typ elementu przez interfejs moduł wyliczający.

  • Copy
    A kopię zasad klasy.

  • CollType
    Klasa STL kontenera.

Uwagi

CComEnumOnSTLdefiniuje obiekt COM modułu wyliczającego oparte na zbiorze STL.Do tej klasy można samodzielnie lub w połączeniu z ICollectionOnSTLImpl.Typowe kroki tej klasy są przedstawione poniżej.Aby uzyskać więcej informacji, zobacz Kolekcje ATL i moduły wyliczające.

Aby użyć tej klasy z ICollectionOnSTLImpl:

  • typedefspecjalizacji tej klasy.

  • Użyj typedef jako argument końcowego szablonu w specjalizacji z ICollectionOnSTLImpl.

Zobacz Kolekcje ATL i moduły wyliczające przykład.

Aby użyć tej klasy, niezależnie od ICollectionOnSTLImpl:

  • typedefspecjalizacji tej klasy.

  • Użyj typedef jako argument szablonu specjalizacji z CComObject.

  • Tworzenie instancji CComObject specjalizacji.

  • Zainicjowanie obiektu numeratora wywołując IEnumOnSTLImpl::Init.

  • Zwraca interfejs modułu wyliczającego do klienta.

Hierarchii dziedziczenia

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Wymagania

Nagłówek: atlcom.h

Przykład

Kod pokazany poniżej zawiera rodzajowe funkcji obsługi tworzenia i inicjalizacji obiekt 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

Ta funkcja szablonu można zaimplementować _NewEnum właściwości interfejsu zbierania, jak pokazano poniżej:

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.

Kod ten tworzy typedef do CComEnumOnSTL miejscami wektor CComVariants poprzez IEnumVariant interfejsu.CVariantCollection po prostu specjalizuje się klasy CreateSTLEnumerator do pracy z modułu wyliczającego obiektów tego typu.

Zobacz też

Informacje

IEnumOnSTLImpl

Klasa CComObjectRootEx

CComObjectThreadModel

Klasa IEnumOnSTLImpl

Koncepcje

ATLCollections próbki: demonstruje, ICollectionOnSTLImpl, CComEnumOnSTL i niestandardowe klasy zasad kopii

Inne zasoby

Omówienie klasy ATL