Share via


CTypedPtrList クラス

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

構文

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

パラメーター

BA Standard Edition_CLASS
型指定されたポインター リスト クラスの基底クラス。はポインター リスト クラス ( CObList または CPtrList) である必要があります。

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

メンバー

パブリック メソッド

名前 説明
CTypedPtrList::AddHead 要素 (または別のリスト内のすべての要素) をリストの先頭に追加します (新しい先頭を作成します)。
CTypedPtrList::AddTail リストの末尾に要素 (または別のリストのすべての要素) を追加します (新しい末尾を作成します)。
CTypedPtrList::GetAt 指定した位置にある要素を取得します。
CTypedPtrList::GetHead リストのヘッド要素を返します (空にすることはできません)。
CTypedPtrList::GetNext 次に反復処理の対象となる要素が取得されます。
CTypedPtrList::GetPrev 反復する前の要素を取得します。
CTypedPtrList::GetTail リストの末尾要素を返します (空にすることはできません)。
CTypedPtrList::RemoveHead リストの先頭から要素を削除します。
CTypedPtrList::RemoveTail リストの末尾から要素を削除します。
CTypedPtrList::SetAt 特定の位置に要素を設定します。

解説

ではなく、またはCPtrList使用CTypedPtrListCObListする場合、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

必要条件

ヘッダー: afxtempl.h

CTypedPtrList::AddHead

このメンバー関数は、::AddHead を呼び出 BASE_CLASSします

POSITION AddHead(TYPE newElement);
void AddHead(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

パラメーター

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

newElement
このリストに追加するオブジェクト ポインター。 NULL 値を使用できます。

BA Standard Edition_CLASS
型指定されたポインター リスト クラスの基底クラス。はポインター リスト クラス ( CObList または CPtrList) である必要があります。

pNewList
の CTypedPtrList オブジェクトへのポインター。 pNewList要素がこのリストに追加されます。

戻り値

最初のバージョンでは、新しく挿入された要素の POSITION 値が返されます。

解説

最初のバージョンでは、リストの先頭の前に新しい要素が追加されます。 2 番目のバージョンでは、ヘッドの前に要素の別のリストが追加されます。

CTypedPtrList::AddTail

このメンバー関数は、::AddTail を呼び出 BASE_CLASSします

POSITION AddTail(TYPE newElement);
void AddTail(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

パラメーター

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

newElement
このリストに追加するオブジェクト ポインター。 NULL 値を使用できます。

BA Standard Edition_CLASS
型指定されたポインター リスト クラスの基底クラス。はポインター リスト クラス ( CObList または CPtrList) である必要があります。

pNewList
の CTypedPtrList オブジェクトへのポインター。 pNewList要素がこのリストに追加されます。

戻り値

最初のバージョンでは、新しく挿入された要素の POSITION 値が返されます。

解説

最初のバージョンでは、リストの末尾の後に新しい要素が追加されます。 2 番目のバージョンでは、リストの末尾の後に要素の別のリストが追加されます。

CTypedPtrList::GetAt

POSITION 型の変数は、リストのキーです。

TYPE& GetAt(POSITION position);
TYPE GetAt(POSITION position) const;

パラメーター

TYPE
リストに格納されている要素の型を指定するテンプレート パラメーター。

position
GetHeadPosition の関数呼び出しまたは Find メンバー関数呼び出しによって返される POSITION 値。

戻り値

リストが a への const CTypedPtrListポインターを介してアクセスされる場合は、 GetAt テンプレート パラメーター TYPE で指定された型のポインターを返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、ポインターを CTypedPtrList介してアクセスする場合は、 GetAt テンプレート パラメーター TYPE で指定された型のポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。

解説

インデックスと同じではなく、POSITION 値を自分で操作することはできません。 GetAt は、特定の位置に CObject 関連付けられているポインターを取得します。

POSITION 値がリスト内の有効な位置を表していることを確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。

このインライン関数は、::GetAt を呼び出 BASE_CLASSします

CTypedPtrList::GetHead

このリストのヘッド要素を表すポインターを取得します。

TYPE& GetHead();
TYPE GetHead() const;

パラメーター

TYPE
リストに格納されている要素の型を指定するテンプレート パラメーター。

戻り値

リストが a への const CTypedPtrListポインターを介してアクセスされる場合は、 GetHead テンプレート パラメーター TYPE で指定された型のポインターを返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、ポインターを CTypedPtrList介してアクセスする場合は、 GetHead テンプレート パラメーター TYPE で指定された型のポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。

解説

呼び出す GetHead前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 IsEmpty を使用して、リストに要素が含まれていることを確認します。

CTypedPtrList::GetNext

rPosition で識別されるリスト要素を取得し、rPosition をリスト内の次のエントリの POSITION 値に設定します。

TYPE& GetNext(POSITION& rPosition);
TYPE GetNext(POSITION& rPosition) const;

パラメーター

TYPE
このリストに含まれる要素の型を指定するテンプレート パラメーター。

rPosition
GetNextGetHeadPositionの、または他のメンバー関数呼び出しによって返される POSITION 値への参照。

戻り値

リストが a への const CTypedPtrListポインターを介してアクセスされる場合は、 GetNext テンプレート パラメーター TYPE で指定された型のポインターを返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、ポインターを CTypedPtrList介してアクセスする場合は、 GetNext テンプレート パラメーター TYPE で指定された型のポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。

解説

呼び出しGetHeadPositionまたは CPtrList::Find を使用して初期位置を確立する場合は、前方反復ループで使用GetNextできます。

POSITION 値がリスト内の有効な位置を表していることを確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。

取得した要素がリストの最後の要素である場合、rPosition新しい値は NULL に設定されます。

反復中に要素を削除することができます。 CObList::RemoveAt例を参照してください。

CTypedPtrList::GetPrev

rPosition で識別されるリスト要素を取得し、rPosition をリスト内の前のエントリの POSITION 値に設定します。

TYPE& GetPrev(POSITION& rPosition);
TYPE GetPrev(POSITION& rPosition) const;

パラメーター

TYPE
このリストに含まれる要素の型を指定するテンプレート パラメーター。

rPosition
GetPrev のメンバー関数または他のメンバー関数呼び出しによって返される POSITION 値への参照。

戻り値

リストが a への const CTypedPtrListポインターを介してアクセスされる場合は、 GetPrev テンプレート パラメーター TYPE で指定された型のポインターを返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、ポインターを CTypedPtrList介してアクセスする場合は、 GetPrev テンプレート パラメーター TYPE で指定された型のポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。

解説

への呼び出しGetTailPositionFindで初期位置を確立する場合は、逆反復ループで使用GetPrevできます。

POSITION 値がリスト内の有効な位置を表していることを確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。

取得した要素がリストの最初の要素である場合、rPosition新しい値は NULL に設定されます。

CTypedPtrList::GetTail

このリストのヘッド要素を表すポインターを取得します。

TYPE& GetTail();
TYPE GetTail() const;

パラメーター

TYPE
リストに格納されている要素の型を指定するテンプレート パラメーター。

戻り値

リストが a への const CTypedPtrListポインターを介してアクセスされる場合は、 GetTail テンプレート パラメーター TYPE で指定された型のポインターを返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、ポインターを CTypedPtrList介してアクセスする場合は、 GetTail テンプレート パラメーター TYPE で指定された型のポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。

解説

呼び出す GetTail前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 IsEmpty を使用して、リストに要素が含まれていることを確認します。

CTypedPtrList::RemoveHead

リストの先頭から要素を削除し、返します。

TYPE RemoveHead();

パラメーター

TYPE
リストに格納されている要素の型を指定するテンプレート パラメーター。

戻り値

以前にリストの先頭にあるポインター。 このポインターは、テンプレート パラメーター TYPE で指定された型です。

解説

呼び出す RemoveHead前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 IsEmpty を使用して、リストに要素が含まれていることを確認します。

CTypedPtrList::RemoveTail

リストの末尾から要素を削除し、返します。

TYPE RemoveTail();

パラメーター

TYPE
リストに格納されている要素の型を指定するテンプレート パラメーター。

戻り値

以前にリストの末尾にあるポインター。 このポインターは、テンプレート パラメーター TYPE で指定された型です。

解説

呼び出す RemoveTail前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 IsEmpty を使用して、リストに要素が含まれていることを確認します。

CTypedPtrList::SetAt

このメンバー関数は、::SetAt を呼び出しますBASE_CLASS

void SetAt(POSITION pos, TYPE newElement);

パラメーター

pos
設定する要素の POSITION。

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

newElement
リストに書き込むオブジェクト ポインター。

解説

POSITION 型の変数は、リストのキーです。 インデックスと同じではなく、POSITION 値を自分で操作することはできません。 SetAt は、オブジェクト ポインターをリスト内の指定した位置に書き込みます。

POSITION 値がリスト内の有効な位置を表していることを確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。

詳細な解説については、CObList::SetAt を参照してください

関連項目

MFC サンプル COLLECT
階層図
CPtrList クラス
CObList クラス