Sdílet prostřednictvím


CComEnumOnSTL – třída

Tato třída definuje objekt enumerátoru MODELU COM na základě kolekce standardní knihovny jazyka C++.

Syntaxe

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

Základna
Enumerátor MODELU COM. Příklad najdete v souboru IEnumString .

piid
Ukazatel na ID rozhraní enumerátoru.

T
Typ položky vystavené rozhraním enumerátoru.

Kopírování
Třída zásady kopírování.

Typ kola
Třída kontejneru standardní knihovny C++.

Poznámky

CComEnumOnSTL definuje objekt enumerátoru MODELU COM na základě kolekce standardní knihovny jazyka C++. Tuto třídu lze použít samostatně nebo ve spojení s ICollectionOnSTLImpl. Typické kroky pro použití této třídy jsou popsány níže. Další informace naleznete v tématu ATL Collections and Enumerators.

Chcete-li použít tuto třídu s ICollectionOnSTLImpl:

  • typedef specializace této třídy.

  • typedef Použijte jako poslední argument šablony ve specializaci ICollectionOnSTLImpl.

Příklad najdete v kolekcích ATL a výčtech .

Chcete-li použít tuto třídu nezávisle na ICollectionOnSTLImpl:

  • typedef specializace této třídy.

  • typedef Použijte jako argument šablony v specializaci .CComObject

  • Vytvořte instanci CComObject specializace.

  • Inicializace enumerator objektu volání IEnumOnSTLImpl::Init.

  • Vraťte rozhraní enumerátoru klientovi.

Hierarchie dědičnosti

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Požadavky

Hlavička: atlcom.h

Příklad

Níže uvedený kód poskytuje obecnou funkci pro zpracování vytváření a inicializace objektu enumerátoru:

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

Tuto šablonu funkce lze použít k implementaci _NewEnum vlastnosti rozhraní kolekce, jak je znázorně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 , který zveřejňuje vektory CComVariants prostřednictvím IEnumVariant rozhraní. Třída CVariantCollection se jednoduše specializuje CreateSTLEnumerator na práci s objekty enumerátoru tohoto typu.

Viz také

IEnumOnSTLImpl
Ukázka ATLCollections: Demonstruje ICollectionOnSTLImpl, CComEnumOnSTL a vlastní třídy zásad kopírování
Přehled třídy
CComObjectRootEx – třída
CComObjectThreadModel
IEnumOnSTLImpl – třída