CAdapt Class
Этот шаблон используется для создания оболочек классов, переопределяющих оператор взятия адреса, чтобы он возвращал нечто, отличное от адреса объекта.
template <
class T
>
class CAdapt
Параметры
- T
Адаптированный тип.
Члены
Открытые конструкторы
Имя |
Описание |
---|---|
Конструктор. |
Открытые операторы
Имя |
Описание |
---|---|
Возвращает const ссылку на m_T. |
|
Возвращает ссылку на m_T. |
|
Сравнивает объект адаптированного типа с m_T. |
|
Присваивает m_T объект адаптированного типа. |
|
Сравнивает объект адаптированного типа с 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