다음을 통해 공유


ATL 복사 정책 클래스

복사 정책 클래스는 유틸리티 클래스 를 초기화 하는 데 사용, 복사 및 데이터를 삭제 합니다.복사 정책 클래스 복사 의미 모든 종류의 데이터를 정의 하 고 다른 데이터 형식 간의 변환을 정의할 수 있습니다.

ATL 사용 복사 정책 클래스의 구현 과정은 다음과 같은 템플릿을.

복사 또는 데이터 템플릿 인수로 전달할 수 있는 복사 정책 클래스를 변환 하는 데 필요한 정보를 캡슐화 하 여 ATL 개발자 익스트림 애플리케이션에서의 이러한 클래스를 제공 합니다.예를 들어, 임의의 데이터 형식을 사용 하 여 컬렉션을 구현 하는 경우 제공 하는 데 필요한 모든입니다 적절 한 복사 정책. 컬렉션을 구현 하는 코드를 수정 하는 되지 않습니다.

정의

기본적으로 다음 정적 함수를 제공 하는 클래스는 복사 정책 클래스가입니다.

static void init(DestinationType* p);

static HRESULT copy(DestinationType* pTo, const SourceType* pFrom);

static void destroy(DestinationType* p);

종류를 바꿀 수 있습니다 DestinationType 및 기존의 임의의 데이터 형식과 복사 정책 각각에 대해.

[!참고]

복사 정책 클래스는 임의의 데이터 형식에 대해 정의할 수 있지만 클래스 ATL 코드에서 사용을 감지 하는 형식을 제한 해야 합니다.예를 들어 때 복사 정책 클래스 ATL의 컬렉션 또는 열거자 구현에 DestinationType COM 인터페이스 메서드 매개 변수로 사용할 수 있는 형식 이어야 합니다.

사용 초기화 데이터를 초기화 하 복사 데이터를 복사 하 고 파괴 데이터를 제거 합니다.정확한 의미는 초기화, 복사 및 소멸 복사 정책 클래스의 도메인 및 관련된 데이터 형식에 따라 달라 집니다.

사용 및 복사 정책 클래스의 구현에서 두 가지 요구 사항이 있습니다.

  • 첫 번째 매개 변수를 복사 를 사용 하 여 이전에 초기화 한 데이터에 대 한 포인터를 받아야만 초기화.

  • 파괴 만 사용 하 여 이전에 초기화 한 데이터에 대 한 포인터를 받아야 초기화 또는 복사를 통해 복사.

표준 구현

ATL 두 복사 정책 클래스의 형태로 제공 된 _Copy_CopyInterface 템플릿 클래스:

  • _Copy 클래스 있습니다만 복사 동종 (않습니다: 데이터 형식 간의 변환) 단일 템플릿 매개 변수가 모두 지정 하 여만 제공 하므로 DestinationType 및 기존의.이 서식 파일의 일반 구현을 초기화 또는 소멸 코드가 없습니다 및 사용 memcpy 데이터를 복사 합니다.ATL에서는 특수화의 _Copy변형, LPOLESTR, OLEVERB, 및 CONNECTDATA 데이터 형식.

  • _CopyInterface 클래스는 표준 COM 규칙을 준수 하는 인터페이스 포인터를 복사에 대 한 구현을 제공 합니다.단순 할당 및 호출을 사용 하도록 다시 한 번이 클래스 동종 복사만 수 AddRef 복사할 수 있습니다.

사용자 지정 구현

일반적으로 이기종 (데이터 형식 간의 변환) 복사에 대 한 고유한 복사 정책 클래스를 정의 해야 합니다.몇 가지 사용자 지정 복사 정책 클래스는 vcue_copy.h와 vcue_copystring.h에서 파일 확인은 ATLCollections 샘플.두 템플릿 복사 정책 클래스이 파일 포함 GenericCopy 및 MapCopy, 수 중의 특수화 GenericCopy 다른 데이터 형식에 대 한.

td6kz9x0.collapse_all(ko-kr,VS.110).gifGenericCopy

GenericCopy지정할 수 있는 기존의 및 DestinationType 템플릿 인수로.다음은 가장 일반적인 형태는 GenericCopy VCUE_Copy.h 클래스:

template <class DestinationType, class SourceType = DestinationType>
class GenericCopy
{
public :
   typedef DestinationType  destination_type;
   typedef SourceType       source_type;

   static void init(destination_type* p)
   {
      _Copy<destination_type>::init(p);
   }
   static void destroy(destination_type* p)
   {
      _Copy<destination_type>::destroy(p);
   }
   static HRESULT copy(destination_type* pTo, const source_type* pFrom)
   {
      return _Copy<destination_type>::copy(pTo, const_cast<source_type*>(pFrom));
   }

}; // class GenericCopy

Vcue_copy.h도 다음이 클래스의 특수화에 포함: GenericCopy<BSTR>, GenericCopy<VARIANT, BSTR>, GenericCopy<BSTR, VARIANT>.Vcue_copystring.h에서 복사 특수화 포함 std::strings: GenericCopy<std::string>, GenericCopy<VARIANT, std::string>, 및 GenericCopy<BSTR, std::string>.강화 수 GenericCopy 특수화를 추가로 제공 합니다.

td6kz9x0.collapse_all(ko-kr,VS.110).gifMapCopy

MapCopy맵 데이터를 저장 하 고 대상 입력 유형을 지정할 수 있도록 데이터를 복사 하 고 STL 스타일 맵에 저장할 수 있다고 가정 합니다.구현 클래스의 방금 제공한 형식 정의 사용 하는 MapType 원본 데이터의 형식을 확인 하 고 적절 한 호출 클래스 GenericCopy 클래스.없음이 클래스의 특수화에 필요 합니다.

template <class MapType, class DestinationType = MapType::referent_type>
class MapCopy
{
public :
   typedef DestinationType          destination_type;
   typedef typename MapType::value_type     source_type;

   typedef MapType                  map_type;
   typedef typename MapType::referent_type  pseudosource_type;

   static void init(destination_type* p)
   {
      GenericCopy<destination_type, pseudosource_type>::init(p);
   }
   static void destroy(destination_type* p)
   {
      GenericCopy<destination_type, pseudosource_type>::destroy(p);
   }
   static HRESULT copy(destination_type* pTo, const source_type* pFrom)
   {
      return GenericCopy<destination_type, pseudosource_type>::copy(pTo, &(pFrom->second));
   }

}; // class MapCopy

참고 항목

개념

STL 기반 컬렉션을 구현

ATLCollections 샘플