このテンプレートは、オブジェクトのアドレス以外の値を返すために、アドレス演算子を再定義するクラスをラップするときに使用されます。
構文
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 は、オブジェクトのアドレス以外の値を返すために、アドレス演算子 (operator &) を再定義するクラスをラップするときに使用される簡単なテンプレートです。 このようなクラスの例としては、ATL の CComBSTR、CComPtr、および CComQIPtr クラス、そしてコンパイラ COM サポート クラスである _com_ptr_t が含まれます。 これらのクラスはすべて、いずれかのデータ メンバーのアドレスを返すために address-of 演算子を再定義します (CComBSTR の場合には BSTR、他のクラスの場合にはインターフェイス ポインター)。
CAdapt の主な役割は、クラス T によって定義された address-of 演算子を隠しながら、適合されたクラスの特性を保持することです。 CAdapt はこの役割を果たしており、T 型のパブリック メンバー m_T を保持し、変換演算子、比較演算子、コピー コンストラクターを定義することにより、T 型のオブジェクトであるかのように CAdapt を特殊化できます。
アダプター クラス CAdapt は、いくつかの container-style クラスで、含まれるオブジェクトのアドレスを address-of 演算子を使用して取得できることが想定されているために、役立ちます。 address-of 演算子の再定義によって、この要件に混乱が生じ、通常はコンパイル エラーが発生し、"単に動作" することが想定されているクラスで、適合されていない型の使用が妨げられることがあります。 CAdapt では、こうした問題を回避するための手段が提供されています。
通常 container-style クラスでは、CAdapt、CComBSTR、CComPtr、または CComQIPtr オブジェクトを保存する場合に _com_ptr_t を使用します。 これは、C++11 Standard のサポート前には C++ Standard Library コンテナーで最も一般的に必要とされていましたが、C++11 Standard Library コンテナーは operator&() をオーバーロードした型と共に自動的に動作します。 Standard Library では、オブジェクトの真のアドレスを取得するために内部で std::addressof を使用することによりこれを実現しています。
要件
ヘッダー: 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;
解説
この public データ メンバーは、 operator const T& および operator T& を使用して直接または間接的にアクセスできます。
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 との比較の結果。