CAdapt クラス
更新 : 2007 年 11 月
このテンプレートは、オブジェクトのアドレス以外の値を返すために、アドレス演算子を再定義するクラスをラップするときに使用されます。
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