Compartilhar via


Classe IEnumOnSTLImpl

Essa classe define uma interface do enumerador com base em uma coleção da Biblioteca Padrão do C++.

Sintaxe

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

Parâmetros

Base
Um enumerador COM. Consulte IEnumString para obter um exemplo.

piid
Um ponteiro para a ID da interface do enumerador.

T
O tipo de item exposto pela interface do enumerador.

Copy
Uma classe de política de cópia.

CollType
Uma classe de contêiner da Biblioteca Padrão do C++.

Membros

Métodos públicos

Nome Descrição
IEnumOnSTLImpl::Clone A implementação de Clone.
IEnumOnSTLImpl::Init Inicializa o enumerador.
IEnumOnSTLImpl::Next A implementação de Next.
IEnumOnSTLImpl::Reset A implementação de Reset.
IEnumOnSTLImpl::Skip A implementação de Skip.

Membros de Dados Públicos

Nome Descrição
IEnumOnSTLImpl::m_iter O iterador que representa a posição atual do enumerador na coleção.
IEnumOnSTLImpl::m_pcollection Um ponteiro para o contêiner da Biblioteca Padrão C++ que contém os itens a serem enumerados.
IEnumOnSTLImpl::m_spUnk O ponteiro IUnknown do objeto que fornece a coleção.

Comentários

IEnumOnSTLImpl oferece a implementação de uma interface de enumerador do COM em que os itens que estão sendo enumerados são armazenados em um contêiner compatível com a Biblioteca Padrão do C++. Essa classe é análoga à classe CComEnumImpl, que oferece uma implementação de uma interface de enumerador com base em uma matriz.

Observação

Confira CComEnumImpl::Init para ver detalhes sobre mais diferenças entre CComEnumImpl e IEnumOnSTLImpl.

Normalmente, você não precisará criar sua própria classe de enumerador derivando dessa implementação de interface. Se você quiser usar um enumerador fornecido pela ATL com base em um contêiner da Biblioteca Padrão C++, é mais comum criar uma instância do CComEnumOnSTL ou criar uma classe de coleção que retorna um enumerador derivando de ICollectionOnSTLImpl.

No entanto, se você precisar oferecer um enumerador personalizado (por exemplo, um que exponha interfaces além da interface do enumerador), poderá derivar dessa classe. Nessa situação, é provável que você precise substituir o método Clone para oferecer sua própria implementação.

Hierarquia de herança

Base

IEnumOnSTLImpl

Requisitos

Cabeçalho: atlcom.h

IEnumOnSTLImpl::Init

Inicializa o enumerador.

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

Parâmetros

pUnkForRelease
[entrada] O ponteiro IUnknown de um objeto que deve ser mantido ativo durante o tempo de vida do enumerador. Passe NULL se nenhum objeto desse tipo existir.

collection
Uma referência ao contêiner da Biblioteca Padrão C++ que contém os itens a serem enumerados.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Se você passar Init uma referência a uma coleção mantida em outro objeto, poderá usar o parâmetro pUnkForRelease para garantir que o objeto, e a coleção que ele contém, esteja disponível enquanto o enumerador precisar dele.

Você precisa chamar esse método antes de passar um ponteiro para a interface do enumerador de volta para qualquer cliente.

IEnumOnSTLImpl::Clone

Esse método oferece a implementação do método Clone criando um objeto de tipo CComEnumOnSTL, inicializando-o com a mesma coleção e iterador usados pelo objeto atual e retornando a interface no objeto recém-criado.

STDMETHOD(Clone)(Base** ppEnum);

Parâmetros

ppEnum
[saída] A interface do enumerador em um objeto recém-criado clonado do enumerador atual.

Valor de retorno

Um valor HRESULT padrão.

IEnumOnSTLImpl::m_spUnk

O ponteiro IUnknown do objeto que fornece a coleção.

CComPtr<IUnknown> m_spUnk;

Comentários

Esse ponteiro inteligente mantém uma referência no objeto passado para IEnumOnSTLImpl::Init, garantindo que ele permaneça ativo durante o tempo de vida do enumerador.

IEnumOnSTLImpl::m_pcollection

Esse membro aponta para a coleção que oferece os dados que conduzem a implementação da interface do enumerador.

CollType* m_pcollection;

Comentários

Esse membro é inicializado por uma chamada para IEnumOnSTLImpl::Init.

IEnumOnSTLImpl::m_iter

Esse membro mantém o iterador usado para marcar a posição atual dentro da coleção e navegar até os elementos subsequentes.

CollType::iterator m_iter;

IEnumOnSTLImpl::Next

Esse método fornece a implementação do método Next.

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

Parâmetros

celt
[entrada] O número de elementos solicitados.

rgelt
[saída] A matriz a ser preenchida com os elementos.

pceltBuscado
[saída] O número de elementos realmente retornados no rgelt. Este poderá ser menor que celt se menos elementos de celt permanecerem na lista.

Valor de retorno

Um valor HRESULT padrão.

IEnumOnSTLImpl::Reset

Esse método fornece a implementação do método Reset.

STDMETHOD(Reset)(void);

Valor de retorno

Um valor HRESULT padrão.

IEnumOnSTLImpl::Skip

Esse método fornece a implementação do método Skip.

STDMETHOD(Skip)(ULONG celt);

Parâmetros

celt
[entrada] O número de elementos a serem ignorados.

Valor de retorno

Um valor HRESULT padrão.

Confira também

Visão geral da aula