CTypedPtrList クラス
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のインスタンスを作成し、オブジェクトを 1 つ追加し、ディスクにリストをシリアル化し、オブジェクトを削除します:
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;
}
継承階層
BASE_CLASS
_CTypedPtrList
CTypedPtrList
必要条件
Header: afxtempl.h