Partager via


CComEnumOnSTL, classe

Cette classe définit un objet d’énumérateur COM basé sur une collection de bibliothèques standard 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>

Paramètres

Base
Énumérateur COM. Consultez IEnumString pour obtenir un exemple.

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

T
Type d’élément exposé par l’interface d’énumérateur.

Copy
Classe de stratégie de copie.

CollType
Classe de conteneur de bibliothèque standard C++.

Notes

CComEnumOnSTL définit un objet d’énumérateur COM basé sur une collection de bibliothèques standard C++. Cette classe peut être utilisée par elle-même ou conjointement avec ICollectionOnSTLImpl. Les étapes classiques d’utilisation de cette classe sont décrites ci-dessous. Pour plus d’informations, consultez collections ATL et énumérateurs.

Pour utiliser cette classe avec ICollectionOnSTLImpl :

  • typedef spécialisation de cette classe.

  • Utilisez l’argument typedef de modèle final dans une spécialisation de ICollectionOnSTLImpl.

Consultez les collections ATL et les énumérateurs pour obtenir un exemple.

Pour utiliser cette classe indépendamment de ICollectionOnSTLImpl :

  • typedef spécialisation de cette classe.

  • Utilisez l’argument typedef de modèle dans une spécialisation de CComObject.

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

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

  • Retournez l’interface d’énumérateur au client.

Hiérarchie d'héritage

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Spécifications

En-tête : atlcom.h

Exemple

Le code ci-dessous fournit une fonction générique pour gérer 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

Ce modèle de fonction peut être utilisé pour implémenter la _NewEnum propriété 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 une typedef pour CComEnumOnSTL qui expose un vecteur de CComVariants par le biais de l’interface IEnumVariant . La CVariantCollection classe se spécialise CreateSTLEnumerator simplement pour travailler avec des objets énumérateurs de ce type.

Voir aussi

IEnumOnSTLImpl
Exemple ATLCollections : illustre les classes de stratégie de copie personnalisée ICollectionOnSTLImpl, CComEnumOnSTL et ICollectionOnSTL
Vue d’ensemble de la classe
CComObjectRootEx, classe
CComObjectThreadModel
IEnumOnSTLImpl, classe