Classe de CComEnumOnSTL
Esta classe define um objeto enumerator COM com base em uma coleção de STL.
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
Uma interface de enumerador COM (IEnumXXXX).piid
Um ponteiro para o interface identificação da interface de enumeração.T
O tipo de item exposto pela interface de enumeração.Copy
Uma classe de diretiva de impressão .CollType
Uma classe do contêiner de STL.
Comentários
CComEnumOnSTL define um objeto enumerator COM com base em uma coleção de STL.Essa classe pode ser usada em seus próprios ou em conjunto com ICollectionOnSTLImpl.As etapas típicas para usar essa classe são descritas abaixo.Para obter mais informações, consulte coleções e enumeradores de ATL.
Para usar esta classe com ICollectionOnSTLImpl:
typedef uma especialização de essa classe.
Use typedef como o argumento final do modelo em uma especialização de ICollectionOnSTLImpl.
coleções e enumeradores de ATL consulte para um exemplo.
Para usar esta classe independentemente de ICollectionOnSTLImpl:
typedef uma especialização de essa classe.
Use typedef como o argumento do modelo em uma especialização de CComObject.
Crie uma instância de especialização de CComObject .
Inicializar o objeto enumerator chamando IEnumOnSTLImpl::Init.
Retornar a interface do enumerador para o cliente.
Hierarquia de herança
CComObjectRootBase
Base
CComEnumOnSTL
Requisitos
Cabeçalho: atlcom.h
Exemplo
O código mostrado abaixo fornece uma função genérico para manipular a criação e a inicialização de um objeto enumerator:
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
Essa função de modelo pode ser usada para implementar como mostrado a propriedade de _NewEnum de uma interface de coleção 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.
Esse código cria typedef para CComEnumOnSTL que expõe um vetor de CComVariants por meio da interface de IEnumVariant .A classe de CVariantCollection especializa simplesmente CreateSTLEnumerator para trabalhar com objetos de enumerador de esse tipo.