Classe CComEnumOnSTL
Essa classe define um objeto de enumerador COM baseado 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
Um enumerador de COM (IEnumXXXX) interface.piid
Um ponteiro para a ID da interface do enumerador.T
O tipo de item exposto pela interface do enumerador.Copy
A copiar diretiva classe.CollType
Uma classe de contêiner STL.
Comentários
CComEnumOnSTL define um objeto de enumerador COM base em uma coleção de STL. Essa classe pode ser usada sozinho ou em conjunto com ICollectionOnSTLImpl.Etapas típicas para usar essa classe são descritas a seguir.Para obter mais informações, consulte ATL coleções e enumeradores.
Para usar essa classe com ICollectionOnSTLImpl:
typedef uma especialização dessa classe.
Use o typedef sistema autônomo o argumento final modelo em uma especialização de ICollectionOnSTLImpl.
See ATL coleções e enumeradores para obter um exemplo.
Para usar essa classe independentemente ICollectionOnSTLImpl:
typedef uma especialização dessa classe.
Use o typedef sistema autônomo argumento em uma especialização de modelo CComObject.
Criar uma instância do CComObject especialização.
Inicializar o objeto enumerador chamando IEnumOnSTLImpl::Init.
Retorne a interface do enumerador para o cliente.
Requisitos
Cabeçalho: atlcom.h
Exemplo
O código mostrado a seguir fornece uma função genérica para gerenciar 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
Esta função do modelo pode ser usada para implementar o _NewEnum propriedade de uma interface de coleção sistema autônomo 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.
Esse código cria um typedef para CComEnumOnSTL que expõe um vetor de CComVariants por meio da IEnumVariant interface.The CVariantCollection classe simplesmente especializada CreateSTLEnumerator para trabalhar com objetos do enumerador desse tipo.