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.