CAdapt 类
此模板用于包装一些类,这些类将 address-of 运算符重新定义为返回对象地址之外的内容。
语法
template <class T>
class CAdapt
参数
T
已适配的类型。
成员
公共构造函数
名称 | 描述 |
---|---|
CAdapt::CAdapt | 构造函数。 |
公共运算符
“属性” | 描述 |
---|---|
CAdapt::operator const T& | 返回对 m_T 的 const 引用。 |
CAdapt::operator T& | 返回 m_T 的引用。 |
CAdapt::operator < | 将已适配类型的对象与 m_T 作比较。 |
CAdapt::operator = | 将已适配类型的对象分配给 m_T 。 |
CAdapt::operator == | 将已适配类型的对象与 m_T 作比较。 |
公共数据成员
“属性” | 描述 |
---|---|
CAdapt::m_T | 正在适配的数据。 |
备注
CAdapt
是用于包装类(将 address-of 运算符 (operator &
) 重新定义为返回对象地址以外的内容)的简单模板。 这样的类的示例包括 ATL 的 CComBSTR
、CComPtr
和 CComQIPtr
类,以及编译器 COM 支持类 _com_ptr_t
。 这些类都将 address-of 运算符重新定义为返回类的数据成员(对于 CComBSTR
是 BSTR;对于其他类是接口指针)之一的地址。
CAdapt
的主要作用是隐藏由类 T 定义的 address-of 运算符,但仍保留已适配的类的特征。 通过包含 T 类型的公共成员 m_T,以及定义转换运算符、比较运算符和复制构造函数来允许将 CAdapt
的专用化当做 T 类型的对象处理,CAdapt
实现了这个作用。
适配器类 CAdapt
很有用,因为某些容器样式类期望能够使用 address-of 运算符获取其包含的对象的地址。 重新定义 address-of 运算符可能使此需求无法得到满足,而且通常会导致编译错误并阻止将非适配类型用于期望它“正常工作”的类。 CAdapt
围绕这些问题提供了一种方法。
通常,当你要将 CAdapt
、CComBSTR
、CComPtr
或 CComQIPtr
对象存储在容器样式类中时,你将使用 _com_ptr_t
。 在大多数情况下,若要支持 C++ 标准,这对于 C++11 标准库容器必需的,但 C++11 标准库容器会自动处理已重载 operator&()
的类型。 标准库通过在内部使用 std::addressof 获取对象的真实地址来达到这一目的。
要求
Header: atlcomcli.h
CAdapt::CAdapt
构造函数允许对适配器对象进行默认构造、从适配类型的对象复制或从其他适配器对象复制。
CAdapt();
CAdapt(const T& rSrc);
CAdapt(const CAdapt& rSrCA);
CAdapt(T&& rSrCA); // (Visual Studio 2017)
CAdapt(CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
参数
rSrc
适配为要复制到新构造的适配器对象的类型的变量。
rSrCA
适配器对象所包含的数据应复制(或移动)到新构造的适配器对象中。
CAdapt::m_T
保存正在适配的数据。
T m_T;
备注
可以使用 operator const T& 和 operator T& 直接或间接访问 public
数据成员。
CAdapt::operator const T&
返回对 m_T 成员的 const
引用,允许将适配器对象视为 T 类型的对象。
operator const T&() const;
返回值
对 m_T
的 const
引用。
CAdapt::operator T&
返回对 m_T 成员的引用,允许将适配器对象视为 T 类型的对象。
operator T&();
返回值
对 m_T
的引用。
CAdapt::operator <
将已适配类型的对象与 m_T 作比较。
bool operator<(const T& rSrc) const;
参数
rSrc
对要比较的对象的引用。
返回值
m_T
与 rSrc 之间的比较结果。
CAdapt::operator =
赋值运算符将参数 rSrc 分配给数据成员 m_T 并返回当前适配器对象。
CAdapt& operator= (const T& rSrc);
CAdapt& operator= (T&& rSrCA); // (Visual Studio 2017)
CAdapt& operator= (CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
参数
rSrc
对要复制的适配类型的对象的引用。
rSrCA
对要移动的对象的引用。
返回值
对当前对象的引用。
CAdapt::operator ==
将已适配类型的对象与 m_T 作比较。
bool operator== (const T& rSrc) const;
参数
rSrc
对要比较的对象的引用。
返回值
m_T 与 rSrc 之间的比较结果。