Clase CComEnumOnSTL
Esta clase define un objeto enumerador COM basado en una colección de bibliotecas estándar de C++.
Sintaxis
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>
Parámetros
Base
Enumerador COM. Consulte IEnumString para ver un ejemplo.
piid
Puntero al Id. de interfaz de la interfaz del enumerador.
T
El tipo de elemento expuesto por la interfaz del enumerador.
Copiar
Una clase de directiva de copia.
CollType
Una clase contenedora de la Biblioteca estándar de C++.
Comentarios
CComEnumOnSTL
define un objeto enumerador COM basado en una colección de bibliotecas estándar de C++. Esta clase se puede usar por sí misma o con ICollectionOnSTLImpl. Ahora se describen los pasos típicos para usar esta clase. Para más información, consulte Colecciones y enumeradores de ATL.
Para usar esta clase con ICollectionOnSTLImpl:
typedef
una especialización de esta clase.Use
typedef
como argumento de plantilla final en una especialización deICollectionOnSTLImpl
.
Consulte Colecciones y enumeradores de ATL para obtener un ejemplo.
Para usar esta clase independientemente de ICollectionOnSTLImpl:
typedef
una especialización de esta clase.Use
typedef
como argumento de plantilla en una especialización deCComObject
.Cree una instancia de la especialización
CComObject
.Inicialice el objeto enumerador llamando a IEnumOnSTLImpl::Init.
Devuelve la interfaz del enumerador al cliente.
Jerarquía de herencia
CComObjectRootBase
Base
CComEnumOnSTL
Requisitos
Encabezado: atlcom.h
Ejemplo
El código que se muestra a continuación proporciona una función genérica para controlar la creación e inicialización de un objeto enumerador:
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
Esta plantilla de función se puede usar para implementar la _NewEnum
propiedad de una interfaz de colección, como se muestra a continuación:
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.
Este código crea un atributo typedef
para CComEnumOnSTL
que expone un vector de CComVariant
a través de la interfaz IEnumVariant
. La clase CVariantCollection
simplemente especializa CreateSTLEnumerator
para trabajar con objetos enumeradores de este tipo.
Consulte también
IEnumOnSTLImpl
Ejemplo de ATLCollections: muestra las clases de directiva de copia personalizada, ICollectionOnSTLImp y CComEnumOnSTL
Información general sobre la clase
CComObjectRootEx (clase)
CComObjectThreadModel
IEnumOnSTLImpl (clase)