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
使用CTypedPtrList
CObList
する場合、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
前GetNext
GetHeadPosition
の、または他のメンバー関数呼び出しによって返される 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 で指定された型のポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。
解説
への呼び出しGetTailPosition
Find
で初期位置を確立する場合は、逆反復ループで使用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 を参照してください。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示