Compartir a través de


IEnumOnSTLImpl (clase)

Esta clase define una interfaz de enumerador basada en una colección de bibliotecas estándar de C++.

Sintaxis

template <class Base,
    const IID* piid, class T, class Copy, class CollType>
class ATL_NO_VTABLE IEnumOnSTLImpl : public Base

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++.

Miembros

Métodos públicos

Nombre Descripción
IEnumOnSTLImpl::Clone La implementación de Clone.
IEnumOnSTLImpl::Init Inicializa el enumerador.
IEnumOnSTLImpl::Next La implementación de Next.
IEnumOnSTLImpl::Reset La implementación de Reset.
IEnumOnSTLImpl::Skip La implementación de Skip.

Miembros de datos públicos

Nombre Descripción
IEnumOnSTLImpl::m_iter Iterador que representa la posición actual del enumerador dentro de la colección.
IEnumOnSTLImpl::m_pcollection Puntero al contenedor de la biblioteca estándar de C++ que contiene los elementos que se van a enumerar.
IEnumOnSTLImpl::m_spUnk Puntero IUnknown del objeto que proporciona la colección.

Comentarios

IEnumOnSTLImpl proporciona la implementación de una interfaz de enumerador COM donde los elementos enumerados se almacenan en un contenedor compatible con la biblioteca estándar de C++. Esta clase es análoga a la clase CComEnumImpl, que proporciona una implementación para una interfaz de enumerador basada en una matriz.

Nota:

Consulte CComEnumImpl::Init para obtener más información sobre las diferencias entre CComEnumImpl y IEnumOnSTLImpl.

Normalmente, no es necesario crear su propia clase de enumerador derivando de esta implementación de interfaz. Si desea usar un enumerador proporcionado por ATL basado en un contenedor de biblioteca estándar de C++, es más común crear una instancia de CComEnumOnSTL o crear una clase de colección que devuelva un enumerador derivando de ICollectionOnSTLImpl.

Sin embargo, si necesita proporcionar un enumerador personalizado (por ejemplo, uno que expone interfaces, además de la interfaz del enumerador), puede derivar a partir de esta clase. En esta situación, es probable que tenga que invalidar el método Clone para proporcionar su propia implementación.

Jerarquía de herencia

Base

IEnumOnSTLImpl

Requisitos

Encabezado: atlcom.h

IEnumOnSTLImpl::Init

Inicializa el enumerador.

HRESULT Init(
    IUnknown* pUnkForRelease,
    CollType& collection);

Parámetros

pUnkForRelease
[in] Puntero IUnknown de un objeto que se debe mantener activo durante la vigencia del enumerador. Pase un valor NULL si no existe este objeto.

collection
Referencia al contenedor de la biblioteca estándar de C++ que contiene los elementos que se van a enumerar.

Valor devuelto

Valor HRESULT estándar.

Comentarios

Si pasa Init una referencia a una colección que se mantiene en otro objeto, puede usar el parámetro pUnkForRelease para asegurarse de que el objeto, y la colección que contiene, está disponible siempre que el enumerador lo necesite.

Debe llamar a este método antes de volver a pasar a los clientes un puntero dirigido a la interfaz del enumerador.

IEnumOnSTLImpl::Clone

Este método proporciona la implementación del método Clone creando un objeto de tipo CComEnumOnSTL, inicializándolo con la misma colección e iterador utilizado por el objeto actual y devolviendo la interfaz en el objeto recién creado.

STDMETHOD(Clone)(Base** ppEnum);

Parámetros

ppEnum
[out] Interfaz del enumerador en un objeto recién creado y clonado desde el enumerador actual.

Valor devuelto

Valor HRESULT estándar.

IEnumOnSTLImpl::m_spUnk

Puntero IUnknown del objeto que proporciona la colección.

CComPtr<IUnknown> m_spUnk;

Comentarios

Este puntero inteligente mantiene una referencia en el objeto pasado a IEnumOnSTLImpl::Init, asegurándose de que permanece activo durante la vigencia del enumerador.

IEnumOnSTLImpl::m_pcollection

Este miembro apunta a la colección que proporciona los datos que impulsan la implementación de la interfaz del enumerador.

CollType* m_pcollection;

Comentarios

Este miembro se inicializa mediante una llamada a IEnumOnSTLImpl::Init.

IEnumOnSTLImpl::m_iter

Este miembro contiene el iterador usado para marcar la posición actual dentro de la colección y navegar a los elementos posteriores.

CollType::iterator m_iter;

IEnumOnSTLImpl::Next

Este método proporciona la implementación del método Next.

STDMETHOD(Next)(
    ULONG celt,
    T* rgelt,
    ULONG* pceltFetched);

Parámetros

Celt
[in] Número de elementos solicitados.

rgelt
[out] Matriz que se va a rellenar con los elementos .

pceltFetched
[out] Número de elementos realmente devueltos en rgelt. Esto puede ser menor que celt si menos elementos celt permanecen en la lista.

Valor devuelto

Valor HRESULT estándar.

IEnumOnSTLImpl::Reset

Este método proporciona la implementación del método Reset.

STDMETHOD(Reset)(void);

Valor devuelto

Valor HRESULT estándar.

IEnumOnSTLImpl::Skip

Este método proporciona la implementación del método Skip.

STDMETHOD(Skip)(ULONG celt);

Parámetros

Celt
[in] Número de elementos que se van a omitir.

Valor devuelto

Valor HRESULT estándar.

Consulte también

Información general sobre la clase