此模板用于包装一些类,这些类将 address-of 运算符重新定义为返回对象地址之外的内容。
template <
class T
>
class CAdapt
参数
- T
已适配的类型。
成员
公共构造函数
名称 |
说明 |
---|---|
构造函数。 |
公共运算符
名称 |
说明 |
---|---|
返回对 m_T 的 const 引用。 |
|
返回对 m_T 的引用。 |
|
将已适配类型的对象与 m_T 作比较。 |
|
将已适配类型的对象分配给 m_T。 |
|
将已适配类型的对象与 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 围绕这些问题提供了一种方法。
通常,当你要将 CComBSTR、CComPtr、CComQIPtr 或 _com_ptr_t 对象存储在容器样式类中时,你将使用 CAdapt。 在大多数情况下,若要支持 C++ 标准,这对于 C++11 标准库容器必需的,但 C++11 标准库容器会自动处理已重载 operator&() 的类型。 标准库通过在内部使用 std::addressof() 获取对象的真实地址来达到这一目的。
要求
**标头:**atlcomcli.h