Partager via


Classe de CComEnumOnSTL

Cette classe définit un objet énumérateur COM selon une collection 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 >

Paramètres

  • Base
    Une interface d'énumérateur COM (IEnumXXXX).

  • piid
    Pointeur vers l'ID d'interface de l'interface d'énumérateur.

  • T
    Le type d'élément exposé par l'interface d'énumérateur.

  • Copy
    Une classe de stratégie de copie .

  • CollType
    Une classe de conteneur STL.

Notes

CComEnumOnSTL définit un objet énumérateur COM selon une collection STL.Cette classe peut être utilisée seule ou conjointement avec ICollectionOnSTLImpl.Les étapes standard pour l'utilisation de cette classe sont dessinées les grandes lignes ci-dessous.Pour plus d'informations, consultez Collections et énumérateurs ATL.

Pour utiliser cette classe avec ICollectionOnSTLImpl :

  • typedef une spécialisation de cette classe.

  • Utilisez typedef comme argument template final dans une spécialisation d' ICollectionOnSTLImpl.

Consultez Collections et énumérateurs ATL pour un exemple.

Pour utiliser cette classe indépendamment de ICollectionOnSTLImpl :

  • typedef une spécialisation de cette classe.

  • Utilisez typedef comme argument template dans une spécialisation d' CComObject.

  • Créez une instance de la spécialisation d' CComObject .

  • Initialisez l'objet énumérateur en appelant IEnumOnSTLImpl::Init.

  • Retourne l'interface de l'énumérateur au client.

Hiérarchie d'héritage

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Configuration requise

Header: atlcom.h

Exemple

Le code indiqué ci-dessous fournit une fonction générique pour traiter la création et l'initialisation d'un objet énumérateur :

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

Cette fonction de modèle peut être utilisée pour implémenter la propriété d' _NewEnum d'une interface de collection comme indiqué ci-dessous :

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.

Ce code crée typedef pour CComEnumOnSTL qui expose un vecteur d' CComVariants au moyen de l'interface d' IEnumVariant .La classe de CVariantCollection spécialise simplement CreateSTLEnumerator pour utiliser les objets énumérateurs de ce type.

Voir aussi

Référence

IEnumOnSTLImpl

Classe de CComObjectRootEx

CComObjectThreadModel

Classe d'IEnumOnSTLImpl

Concepts

ATLCollections : Illustre ICollectionOnSTLImpl, CComEnumOnSTL, et classes personnalisées de stratégie de copie

Autres ressources

Vue d'ensemble de la classe ATL