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 コレクション クラスの例