Поделиться через


CAdapt Class

Этот шаблон используется для создания оболочек классов, переопределяющих оператор взятия адреса, чтобы он возвращал нечто, отличное от адреса объекта.

template < 
   class T 
> 
class CAdapt

Параметры

  • T
    Адаптированный тип.

Члены

Открытые конструкторы

Имя

Описание

CAdapt::CAdapt

Конструктор.

Открытые операторы

Имя

Описание

CAdapt::operator const T&

Возвращает const ссылку на m_T.

CAdapt::operator T&

Возвращает ссылку на m_T.

CAdapt::operator <

Сравнивает объект адаптированного типа с m_T.

CAdapt::operator =

Присваивает m_T объект адаптированного типа.

CAdapt::operator ==

Сравнивает объект адаптированного типа с m_T.

Открытые члены данных

Имя

Описание

CAdapt::m_T

Адаптируемые данные.

Заметки

CAdapt представляет собой простой шаблон, который используется для создания оболочек классов, переопределяющих оператор взятия адреса (operator &), чтобы он возвращал нечто, отличное от адреса объекта. Примерами таких классов являются классы ATL CComBSTR, CComPtr и CComQIPtr, а также класс поддержки COM компилятора _com_ptr_t. Все эти классы переопределяют оператор взятия адреса, чтобы он возвращал адрес одного из своих данных-членов (BSTR в случае CComBSTR и указатель на интерфейс в случае других классов).

Основным назначением CAdapt является скрытие оператора взятия адреса, определенного классом T, при сохранении характеристик адаптированного класса. CAdapt выполняет эту роль, включая в себя открытый член m_T типа T и определяя операторы преобразования, операторы сравнения и конструктор копии, чтобы со специализациями CAdapt можно было обращаться как с объектами типа T.

Класс адаптера CAdapt полезен, поскольку для некоторых классов стиля контейнера ожидается, что они могут получать адреса содержащихся в них объектов с помощью оператора взятия адреса. Переопределение оператора взятия адреса может нарушать это требование, поскольку обычно вызывает ошибки компиляции и не позволяет использовать неадаптированный тип с классами, которые ожидают, что он "просто будет работать". CAdapt предоставляет способ обойти эти проблемы.

Обычно CAdapt используется при необходимости хранить объекты CComBSTR, CComPtr, CComQIPtr или _com_ptr_t в классе стиля контейнера. Это часто требовалось для контейнеров стандартной библиотеки C++ до введения поддержки стандарта C++11; контейнеры стандартной библиотеки C++11 автоматически работают с типами, в которых оператор operator&() перегружен. В стандартной библиотеке это достигается внутренними средствами за счет использования функции std::addressof () для получения истинных адресов объектов.

Требования

Заголовок: atlcomcli.h

См. также

Другие ресурсы

ATL Class Overview