Udostępnij za pośrednictwem


Klasa CComEnumOnSTL

Ta klasa definiuje obiekt modułu wyliczającego COM na podstawie kolekcji biblioteki standardowej języka C++.

Składnia

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

Baza
Moduł wyliczający COM. Zobacz przykład IEnumString .

piid
Wskaźnik do identyfikatora interfejsu interfejsu modułu wyliczającego.

T
Typ elementu uwidocznionego przez interfejs modułu wyliczającego.

kopia
Klasa zasad kopiowania.

Typ sortowania
Klasa kontenera biblioteki standardowej C++.

Uwagi

CComEnumOnSTL definiuje obiekt modułu wyliczającego COM na podstawie kolekcji standardowej biblioteki języka C++. Tej klasy można używać samodzielnie lub w połączeniu z ICollectionOnSTLImpl. Poniżej przedstawiono typowe kroki korzystania z tej klasy. Aby uzyskać więcej informacji, zobacz Kolekcje i moduły wyliczania ATL.

Aby użyć tej klasy z aplikacją ICollectionOnSTLImpl:

  • typedef specjalizacja tej klasy.

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

Zobacz przykład Kolekcje i moduły wyliczania ATL.

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

  • typedef specjalizacja tej klasy.

  • typedef Użyj jako argumentu szablonu w specjalizacji .CComObject

  • Utwórz wystąpienie specjalizacji CComObject .

  • Zainicjuj obiekt modułu wyliczającego, wywołując element IEnumOnSTLImpl::Init.

  • Zwróć interfejs modułu wyliczającego do klienta.

Hierarchia dziedziczenia

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Wymagania

Nagłówek: atlcom.h

Przykład

Poniższy kod udostępnia funkcję ogólną do obsługi tworzenia i inicjowania obiektu modułu wyliczającego:

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

Za pomocą tego szablonu funkcji można zaimplementować _NewEnum właściwość interfejsu kolekcji, 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.

Ten kod tworzy typedef element , CComEnumOnSTL który uwidacznia wektor CComVariants za pomocą interfejsu IEnumVariant . Klasa CVariantCollection po prostu specjalizuje się CreateSTLEnumerator w pracy z obiektami wyliczania tego typu.

Zobacz też

IEnumOnSTLImpl
Przykład ATLCollections: demonstruje klasy zasad ICollectionOnSTLImpl, CComEnumOnSTL i niestandardowe klasy zasad kopiowania
Omówienie klasy
Klasa CComObjectRootEx
CComObjectThreadModel
Klasa IEnumOnSTLImpl