次の方法で共有


CTypedPtrList クラス

更新 : 2007 年 11 月

CPtrList クラスのオブジェクトに対してタイプ セーフな "ラップ" が用意されています。

template< class BASE_CLASS, class TYPE >
class CTypedPtrList : public BASE_CLASS

パラメータ

  • BASE_CLASS
    型付きのポインタ リスト クラスの基本クラス。必ずポインタ リスト クラスにします (CObList または CPtrList)。

  • TYPE
    基本クラスのリストに格納されている要素の型。

解説

CObList または CPtrList の代わりに CTypedPtrList を使うと、ポインタ型の不一致により発生するエラーを C++ の型チェック機能で防ぐことができます。

さらに、CTypedPtrList ラッパー関数は、CObList または CPtrList を使ったときに必要となるキャストの大部分を行います。

CTypedPtrList のメンバ関数はすべてインラインなので、このテンプレートを使用しても、コードのサイズや速度にはそれほど影響しません。

CObList から派生したリストはシリアル化できますが、CPtrList から派生したリストはシリアル化できません。

CTypedPtrList オブジェクトを削除するか、またはその要素を削除すると、ポインタだけが削除されます。ポインタが参照している実体は削除されません。

CTypedPtrList の使い方の詳細については、「コレクション クラス」および「テンプレート ベースのクラス」を参照してください。

使用例

次の例では、CtypedPtrList のインスタンスを作成し、オブジェクトを追加します。その後、リストをディスクにシリアル化してから、オブジェクトを削除します。

typedef CTypedPtrList<CObList, CMyObject*>  CMyList;
CMyList ml;
CMyObject* pMyObject = new CMyObject();
ml.AddTail(pMyObject);

CFileException e;
CFile myFile; 
myFile.Open(_T("CTypedPtrList_File.txt"), 
   CFile::modeCreate|CFile::modeWrite, &e);
CArchive ar(&myFile, CArchive::store);
ml.Serialize(ar);

ar.Close();
myFile.Close(); 

while (!ml.IsEmpty())
{
   delete ml.GetHead();
   ml.RemoveHead();
}
class CMyObject : public CObject
{
public:
     int i;
     void Serialize(CArchive& ar);
     CMyObject() { i = 9876;}
protected:
     DECLARE_SERIAL(CMyObject)
};

IMPLEMENT_SERIAL(CMyObject, CObject, 0)  

void CMyObject::Serialize(CArchive& ar)
{
    CObject::Serialize(ar);
    if(ar.IsStoring())
         ar << i;
    else
         ar >> i;
}

必要条件

ヘッダー : afxtempl.h

参照

処理手順

COLLECT サンプル : MFC コレクション クラスの例

参照

階層図

CPtrList クラス

CObList クラス

その他の技術情報

CTypedPtrList のメンバ