CAdapt クラス
このテンプレートは、オブジェクトのアドレス以外の値を返すために、アドレス演算子を再定義するクラスをラップするときに使用されます。
template <
class T
>
class CAdapt
パラメーター
- T
アダプター適用対象の型。
解説
CAdapt クラスは簡単なテンプレートで、オブジェクトのアドレス以外の値を返すためにアドレス演算子 (operator &) を再定義するクラスをラップするために使用されます。 このようなクラスには、ATL の CComBSTR クラス、CComPtr クラス、CComQIPtr クラスや、コンパイラ COM サポート クラスの _com_ptr_t などがあります。 これらすべてのクラスは、アドレス演算子を再定義し、それぞれのデータ メンバーのうちの 1 つのメンバー (CComBSTR の場合は BSTR、他のクラスの場合はインターフェイス ポインター) のアドレスを返します。
CAdapt の主な役割は、T 型のクラスの特性を保持したまま、そのクラスによって定義されているアドレス演算子を隠すことです。 このような役割を果たすために、CAdapt は T 型のパブリック メンバーである m_T を保持したうえで、CAdapt クラスから特化した複数のクラスを T 型のオブジェクトとして扱えるように、変換演算子、比較演算子、およびコピー コンストラクターを定義します。
多数のコンテナー クラス (STL コンテナー クラスなど) が、それぞれのアドレス演算子を 1 つ使用して、格納している複数のオブジェクトのアドレスを取得することを必要としているため、そのような場面で CAdapt アダプター クラスが役に立ちます。 通常は、アドレス演算子を再定義するとコンパイル エラーが発生し、アダプターを適用していない型をコンテナー クラスでは使用できなくなるなどの問題が発生する場合があります。 CAdapt クラスには、このような問題を回避する手段が用意されています。
通常、list などの STL コンテナーに CComBSTR オブジェクト、CComPtr オブジェクト、CComQIPtr オブジェクト、または**_com_ptr_t** オブジェクトを格納する場合は CAdapt を使用します。 これらの型のオブジェクトは、次のように記述した場合は格納できません。
std::list< CComBSTR > m_List;
代わりに、次のように記述してアダプター オブジェクトを格納する必要があります。
std::list< CAdapt< CComBSTR > > m_List;
必要条件
**ヘッダー:**atlcomcli.h