Condividi tramite


Classe IEnumOnSTLImpl

Questa classe definisce un'interfaccia enumeratore basata su una raccolta di librerie standard C++.

Sintassi

template <class Base,
    const IID* piid, class T, class Copy, class CollType>
class ATL_NO_VTABLE IEnumOnSTLImpl : public Base

Parametri

Base
Enumeratore COM. Per un esempio, vedere IEnumString .

piid
Puntatore all'ID interfaccia dell'interfaccia dell'enumeratore.

T
Tipo di elemento esposto dall'interfaccia dell'enumeratore.

Copia
Classe di criteri di copia.

CollType
Classe contenitore della libreria standard C++.

Membri

Metodi pubblici

Nome Descrizione
IEnumOnSTLImpl::Clone Implementazione di Clone.
IEnumOnSTLImpl::Init Inizializza l'enumeratore.
IEnumOnSTLImpl::Next Implementazione di Next.
IEnumOnSTLImpl::Reset Implementazione di Reset.
IEnumOnSTLImpl::Skip Implementazione di Skip.

Membri dati pubblici

Nome Descrizione
IEnumOnSTLImpl::m_iter Iteratore che rappresenta la posizione corrente dell'enumeratore all'interno dell'insieme.
IEnumOnSTLImpl::m_pcollection Puntatore al contenitore della libreria standard C++ che contiene gli elementi da enumerare.
IEnumOnSTLImpl::m_spUnk Puntatore IUnknown dell'oggetto che fornisce l'insieme.

Osservazioni:

IEnumOnSTLImpl fornisce l'implementazione per un'interfaccia dell'enumeratore COM in cui gli elementi enumerati vengono archiviati in un contenitore compatibile con la libreria standard C++. Questa classe è analoga alla classe CComEnumImpl , che fornisce un'implementazione per un'interfaccia enumeratore basata su una matrice.

Nota

Per informazioni dettagliate sulle altre differenze tra CComEnumImpl e IEnumOnSTLImpl, vedere CComEnumImpl::Init.

In genere, non sarà necessario creare una classe enumeratore personalizzata derivando da questa implementazione dell'interfaccia. Se si vuole usare un enumeratore fornito da ATL basato su un contenitore della libreria standard C++, è più comune creare un'istanza di CComEnumOnSTL o creare una classe di raccolta che restituisce un enumeratore derivando da ICollectionOnSTLImpl.

Tuttavia, se è necessario fornire un enumeratore personalizzato (ad esempio, uno che espone interfacce oltre all'interfaccia dell'enumeratore), è possibile derivare da questa classe. In questa situazione è probabile che sia necessario eseguire l'override del metodo Clone per fornire la propria implementazione.

Gerarchia di ereditarietà

Base

IEnumOnSTLImpl

Requisiti

Intestazione: atlcom.h

IEnumOnSTLImpl::Init

Inizializza l'enumeratore.

HRESULT Init(
    IUnknown* pUnkForRelease,
    CollType& collection);

Parametri

pUnkForRelease
[in] Puntatore IUnknown di un oggetto che deve essere mantenuto attivo durante la durata dell'enumeratore. Passare NULL se non esiste alcun oggetto di questo tipo.

collection
Riferimento al contenitore della libreria standard C++ che contiene gli elementi da enumerare.

Valore restituito

Valore HRESULT standard.

Osservazioni:

Se si passa Init un riferimento a una raccolta contenuta in un altro oggetto, è possibile utilizzare il parametro pUnkForRelease per assicurarsi che l'oggetto e l'insieme in esso contenuto siano disponibili purché l'enumeratore lo richieda.

È necessario chiamare questo metodo prima di passare un puntatore all'interfaccia dell'enumeratore a tutti i client.

IEnumOnSTLImpl::Clone

Questo metodo fornisce l'implementazione del metodo Clone creando un oggetto di tipo CComEnumOnSTL, inizializzandolo con la stessa raccolta e iteratore utilizzato dall'oggetto corrente e restituendo l'interfaccia sull'oggetto appena creato.

STDMETHOD(Clone)(Base** ppEnum);

Parametri

ppEnum
[out] Interfaccia dell'enumeratore in un oggetto appena creato clonato dall'enumeratore corrente.

Valore restituito

Valore HRESULT standard.

IEnumOnSTLImpl::m_spUnk

Puntatore IUnknown dell'oggetto che fornisce l'insieme.

CComPtr<IUnknown> m_spUnk;

Osservazioni:

Questo puntatore intelligente mantiene un riferimento sull'oggetto passato a IEnumOnSTLImpl::Init, assicurandosi che rimanga attivo durante la durata dell'enumeratore.

IEnumOnSTLImpl::m_pcollection

Questo membro punta alla raccolta che fornisce i dati che guidano l'implementazione dell'interfaccia dell'enumeratore.

CollType* m_pcollection;

Osservazioni:

Questo membro viene inizializzato da una chiamata a IEnumOnSTLImpl::Init.

IEnumOnSTLImpl::m_iter

Questo membro contiene l'iteratore utilizzato per contrassegnare la posizione corrente all'interno della raccolta e passare agli elementi successivi.

CollType::iterator m_iter;

IEnumOnSTLImpl::Next

Questo metodo fornisce l'implementazione del metodo Next .

STDMETHOD(Next)(
    ULONG celt,
    T* rgelt,
    ULONG* pceltFetched);

Parametri

celta
[in] Numero di elementi richiesti.

rgelt
[out] Matrice da riempire con gli elementi.

pceltFetched
[out] Numero di elementi effettivamente restituiti in rgelt. Può essere minore di celt se nell'elenco rimangono meno di elementi celt .

Valore restituito

Valore HRESULT standard.

IEnumOnSTLImpl::Reset

Questo metodo fornisce l'implementazione del metodo Reset .

STDMETHOD(Reset)(void);

Valore restituito

Valore HRESULT standard.

IEnumOnSTLImpl::Skip

Questo metodo fornisce l'implementazione del metodo Skip .

STDMETHOD(Skip)(ULONG celt);

Parametri

celta
[in] Numero di elementi da ignorare.

Valore restituito

Valore HRESULT standard.

Vedi anche

Cenni preliminari sulla classe