CComEnumOnSTL, classe
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
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.