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 deICollectionOnSTLImpl
.
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 deCComObject
.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
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 CComVariant
s 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