CComEnumOnSTL 클래스
이 클래스는 STL 컬렉션에 따라 COM 열거자 개체를 정의 합니다.
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 >
매개 변수
Base
COM 열거자 (IEnumXXXX) 인터페이스.piid
열거자 인터페이스의 인터페이스 ID에 대 한 포인터입니다.T
열거자 인터페이스에 의해 노출 되는 항목의 형식입니다.Copy
A 정책을 복사 하는 클래스입니다.CollType
STL 컨테이너 클래스입니다.
설명
CComEnumOnSTLSTL 컬렉션에 따라 COM 열거자 개체를 정의 합니다.이 클래스는 자체적으로 또는 함께에서 사용할 수 있습니다 ICollectionOnSTLImpl.이 클래스를 사용 하는 일반적인 단계는 다음과 같습니다.자세한 내용은 ATL 컬렉션 및 열거자.
ICollectionOnSTLImpl 함께이 클래스를 사용.
typedef이 클래스의 특수화입니다.
사용 된 typedef 의 특수화에 최종 템플릿 인수로 ICollectionOnSTLImpl.
참조 ATL 컬렉션 및 열거자 예입니다.
ICollectionOnSTLImpl 독립적으로이 클래스를 사용 하는 방법
typedef이 클래스의 특수화입니다.
사용 된 typedef 의 특수화에 템플릿 인수로 CComObject.
인스턴스를 만들는 CComObject 특수화입니다.
열거자 개체를 호출 하 여 초기화 IEnumOnSTLImpl::Init.
열거자 인터페이스를 클라이언트에 반환 합니다.
상속 계층 구조
CComObjectRootBase
Base
CComEnumOnSTL
요구 사항
헤더: atlcom.h
예제
아래 표시 된 코드를 생성 및 초기화 하는 열거자 개체를 처리 하는 제네릭 함수를 제공 합니다.
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
이 템플릿 함수를 사용 하 여 구현할 수 있습니다는 _NewEnum 아래와 같이 컬렉션 인터페이스의 속성:
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.
만들고이 코드는 typedef 에 대 한 CComEnumOnSTL 의 벡터를 노출 CComVariant통해 s는 IEnumVariant 인터페이스.CVariantCollection 클래스는 단순히 전문 CreateSTLEnumerator 이 형식의 열거자 개체를 사용 합니다.
참고 항목
참조
개념
ATLCollections 샘플: ICollectionOnSTLImpl, CComEnumOnSTL, 및 사용자 지정 복사 정책 클래스를 보여 줍니다.