CAdapt 类

此模板用于包装一些类,这些类将 address-of 运算符重新定义为返回对象地址之外的内容。

语法

template <class T>
class CAdapt

参数

T
已适配的类型。

成员

公共构造函数

名称 描述
CAdapt::CAdapt 构造函数。

公共运算符

“属性” 描述
CAdapt::operator const T& 返回对 m_Tconst 引用。
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 的 CComBSTRCComPtrCComQIPtr 类,以及编译器 COM 支持类 _com_ptr_t。 这些类都将 address-of 运算符重新定义为返回类的数据成员(对于 CComBSTR 是 BSTR;对于其他类是接口指针)之一的地址。

CAdapt 的主要作用是隐藏由类 T 定义的 address-of 运算符,但仍保留已适配的类的特征。 通过包含 T 类型的公共成员 m_T,以及定义转换运算符、比较运算符和复制构造函数来允许将 CAdapt 的专用化当做 T 类型的对象处理,CAdapt 实现了这个作用。

适配器类 CAdapt 很有用,因为某些容器样式类期望能够使用 address-of 运算符获取其包含的对象的地址。 重新定义 address-of 运算符可能使此需求无法得到满足,而且通常会导致编译错误并阻止将非适配类型用于期望它“正常工作”的类。 CAdapt 围绕这些问题提供了一种方法。

通常,当你要将 CAdaptCComBSTRCComPtrCComQIPtr 对象存储在容器样式类中时,你将使用 _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_Tconst 引用。

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 之间的比较结果。

另请参阅

类概述