다음을 통해 공유


CComEnumOnSTL 클래스

이 클래스는 C++ 표준 라이브러리 컬렉션을 기반으로 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 열거자입니다. 예제는 IEnumString을 참조하세요.

piid
열거자 인터페이스의 인터페이스 ID에 대한 포인터입니다.

T
열거자 인터페이스에 의해 노출되는 항목의 형식입니다.

복사
복사 정책 클래스입니다.

CollType
C++ 표준 라이브러리 컨테이너 클래스입니다.

설명

CComEnumOnSTL 는 C++ 표준 라이브러리 컬렉션을 기반으로 COM 열거자 개체를 정의합니다. 이 클래스는 자체적으로 또는 ICollectionOnSTLImpl과 함께 사용할 수 있습니다. 이 클래스를 사용하는 일반적인 단계는 아래에 설명되어 있습니다. 자세한 내용은 ATL 컬렉션 및 열거자를 참조 하세요.

ICollectionOnSTLImpl에서 이 클래스를 사용하려면 다음을 수행합니다.

  • typedef 이 클래스의 특수화입니다.

  • typedef 특수화 ICollectionOnSTLImpl에서 마지막 템플릿 인수로 사용합니다.

예제는 ATL 컬렉션 및 열거자를 참조하세요.

ICollectionOnSTLImpl과 독립적으로 이 클래스를 사용하려면:

  • typedef 이 클래스의 특수화입니다.

  • typedef 특수화 CComObject에서 템플릿 인수로 사용합니다.

  • 특수화의 인스턴스를 CComObject 만듭니다.

  • IEnumOnSTLImpl::Init를 호출하여 열거자 개체를 초기화합니다.

  • 클라이언트에 열거자 인터페이스를 반환합니다.

상속 계층 구조

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

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 통해 s의 CComVariant벡터를 노출하는 for CComEnumOnSTLIEnumVariant 만듭니다. 클래스는 CVariantCollection 단순히이 형식의 열거자 개체를 사용 하도록 특수화 CreateSTLEnumerator 합니다.

참고 항목

IEnumOnSTLImpl
ATLCollections 샘플: ICollectionOnSTLImpl, CComEnumOnSTL 및 사용자 지정 복사 정책 클래스를 보여 줍니다.
클래스 개요
CComObjectRootEx 클래스
CComObjectThreadModel
IEnumOnSTLImpl 클래스