Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Esta classe define um objeto enumerador COM baseado numa coleção de Biblioteca Padrão C++.
Sintaxe
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
Um enumerador COM. Veja IEnumString para um exemplo.
Piid
Um apontador para o ID da interface do enumerador.
T
O tipo de item exposto pela interface do enumerador.
Copy
Uma aula de política de cópia .
CollType
Uma classe de contentores de Biblioteca Padrão em C++.
Observações
CComEnumOnSTL define um objeto enumerador COM baseado numa coleção de Biblioteca Padrão C++. Esta classe pode ser usada isoladamente ou em conjunto com o ICollectionOnSTLImpl. Os passos típicos para utilizar esta aula são descritos abaixo. Para mais informações, consulte Coleções e Enumeradores ATL.
Para usar esta aula com ICollectionOnSTLImpl:
typedefuma especialização desta disciplina.Use o
typedefcomo argumento modelo final numa especialização deICollectionOnSTLImpl.
Veja ATL Collections and Enumerators para um exemplo.
Para usar esta classe independentemente do ICollectionOnSTLImpl:
typedefuma especialização desta disciplina.Use o
typedefcomo argumento modelo numa especialização deCComObject.Cria uma instância da
CComObjectespecialização.Inicialize o objeto enumerador chamando IEnumOnSTLImpl::Init.
Devolva a interface do enumerador ao cliente.
Hierarquia de herança
CComObjectRootBase
Base
CComEnumOnSTL
Requerimentos
Cabeçalho: atlcom.h
Example
O código mostrado abaixo fornece uma função genérica para gerir a criação e inicialização de um 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
Este modelo de função pode ser usado para implementar a _NewEnum propriedade de uma interface de coleção, como mostrado abaixo:
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 cria um typedef para CComEnumOnSTL que expõe um vetor de CComVariants por meio da IEnumVariant interface. A CVariantCollection classe especializa-se CreateSTLEnumerator simplesmente em trabalhar com objetos enumeradores deste tipo.
Consulte também
IEnumOnSTLImpl
ATLCollections Exemplo: Demonstra ICollectionOnSTLImpl, CComEnumOnSTL e Classes de Política de Cópias Personalizadas
Visão geral da classe
Classe CComObjectRootEx
CComObjectThreadModel
Classe IEnumOnSTLImpl