Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta clase define un objeto COM de enumerador basándose en una colección 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
Una interfaz COM de enumerador ().piid
Un puntero al identificador de la interfaz de la interfaz del enumerador.T
El tipo de elemento expuesto por la interfaz del enumerador.Copy
una clase de directiva de copia .CollType
Una clase de contenedor de STL.
Comentarios
CComEnumOnSTL define un objeto COM de enumerador basándose en una colección de STL.Esta clase se puede usar en solitario o junto con ICollectionOnSTLImpl.Los pasos típicos para utilizar esta clase se describen a continuación.Para obtener más información, vea Colecciones y enumeradores ATL.
para utilizar esta clase con ICollectionOnSTLImpl:
typedef una especialización de esta clase.
Utilice typedef como argumento final de plantilla en una especialización de ICollectionOnSTLImpl.
Vea Colecciones y enumeradores ATL para obtener un ejemplo.
para utilizar esta clase independientemente de ICollectionOnSTLImpl:
typedef una especialización de esta clase.
Utilice typedef como argumento de plantilla en una especialización de CComObject.
Cree una instancia de especialización de CComObject .
Inicializa el objeto enumerator llamando a IEnumOnSTLImpl:: Iniciar.
Devuelve la interfaz del enumerador al cliente.
Jerarquía de herencia
CComObjectRootBase
Base
CComEnumOnSTL
Requisitos
encabezado: atlcom.h
Ejemplo
El código muestra siguiente proporciona una función genérica para controlar la creación y la inicialización de un objeto de 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 función de plantilla se puede utilizar para implementar la propiedad de _NewEnum de una interfaz de intercalación como se muestra a continuación:
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 crea typedef para CComEnumOnSTL que expone un vector de s para CComVariantmediante la interfaz de IEnumVariant .La clase de CVariantCollection especializada simplemente CreateSTLEnumerator para trabajar con objetos de enumeradores de este tipo.