Klasa CTypedPtrList

Zapewnia bezpieczną pod kątem typu "otokę" dla obiektów klasy CPtrList.

Składnia

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

Parametry

BASE_CLASS
Klasa podstawowa klasy listy wskaźników wpisanych; musi być klasą listy wskaźników ( CObList lub CPtrList).

TYPU
Typ elementów przechowywanych na liście klas bazowych.

Członkowie

Metody publiczne

Nazwa/nazwisko opis
CTypedPtrList::AddHead Dodaje element (lub wszystkie elementy na innej liście) do nagłówka listy (tworzy nową głowę).
CTypedPtrList::AddTail Dodaje element (lub wszystkie elementy na innej liście) do końca listy (tworzy nowy ogon).
CTypedPtrList::GetAt Pobiera element na danej pozycji.
CTypedPtrList::GetHead Zwraca element główny listy (nie może być pusty).
CTypedPtrList::GetNext Pobiera następny element do iteracji.
CTypedPtrList::GetPrev Pobiera poprzedni element na potrzeby iteracji.
CTypedPtrList::GetTail Zwraca element końcowy listy (nie może być pusty).
CTypedPtrList::RemoveHead Usuwa element z nagłówka listy.
CTypedPtrList::RemoveTail Usuwa element z końca listy.
CTypedPtrList::SetAt Ustawia element na danej pozycji.

Uwagi

W przypadku używania CTypedPtrList funkcji sprawdzania typów zamiast CObList lub CPtrList, funkcja sprawdzania typów języka C++ pomaga wyeliminować błędy spowodowane niezgodnymi typami wskaźników.

Ponadto CTypedPtrList otoka wykonuje znaczną część rzutowania, która byłaby wymagana w przypadku użycia CObList lub CPtrList.

Ponieważ wszystkie CTypedPtrList funkcje są wbudowane, użycie tego szablonu nie wpływa znacząco na rozmiar lub szybkość kodu.

Listy pochodzące z CObList programu mogą być serializowane, ale te pochodzące z CPtrList programu nie mogą być serializowane.

CTypedPtrList Gdy obiekt zostanie usunięty lub gdy jego elementy zostaną usunięte, zostaną usunięte tylko wskaźniki, a nie jednostki, do których się odwołują.

Aby uzyskać więcej informacji na temat korzystania z programu CTypedPtrList, zobacz artykuły Kolekcje i Klasy oparte na szablonach.

Przykład

W tym przykładzie tworzone jest wystąpienie CTypedPtrListklasy , dodaje jeden obiekt, serializuje listę na dysku, a następnie usuwa obiekt:

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;
}

Hierarchia dziedziczenia

BASE_CLASS

_CTypedPtrList

CTypedPtrList

Wymagania

Nagłówek: afxtempl.h

CTypedPtrList::AddHead

Ta funkcja składowa wywołuje metodę BASE_CLASS::AddHead.

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

Parametry

TYPU
Typ elementów przechowywanych na liście klas bazowych.

newElement
Wskaźnik obiektu, który ma zostać dodany do tej listy. Dozwolona jest wartość NULL.

BASE_CLASS
Klasa podstawowa klasy listy wskaźników wpisanych; musi być klasą listy wskaźników ( CObList lub CPtrList).

pNewList
Wskaźnik do innego obiektu CTypedPtrList . Elementy w pliku pNewList zostaną dodane do tej listy.

Wartość zwracana

Pierwsza wersja zwraca wartość POSITION nowo wstawionego elementu.

Uwagi

Pierwsza wersja dodaje nowy element przed nagłówkiem listy. Druga wersja dodaje kolejną listę elementów przed głową.

CTypedPtrList::AddTail

Ta funkcja składowa wywołuje metodę BASE_CLASS::AddTail.

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

Parametry

TYPU
Typ elementów przechowywanych na liście klas bazowych.

newElement
Wskaźnik obiektu, który ma zostać dodany do tej listy. Dozwolona jest wartość NULL.

BASE_CLASS
Klasa podstawowa klasy listy wskaźników wpisanych; musi być klasą listy wskaźników ( CObList lub CPtrList).

pNewList
Wskaźnik do innego obiektu CTypedPtrList . Elementy w pliku pNewList zostaną dodane do tej listy.

Wartość zwracana

Pierwsza wersja zwraca wartość POSITION nowo wstawionego elementu.

Uwagi

Pierwsza wersja dodaje nowy element po zakończeniu listy. Druga wersja dodaje kolejną listę elementów po zakończeniu listy.

CTypedPtrList::GetAt

Zmienna typu POSITION jest kluczem listy.

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

Parametry

TYPU
Parametr szablonu określający typ elementów przechowywanych na liście.

Pozycji
Wartość POSITION zwrócona przez poprzednie GetHeadPosition wywołanie funkcji lub Find składowej.

Wartość zwracana

Jeśli dostęp do listy jest uzyskiwany za pośrednictwem wskaźnika do const CTypedPtrListelementu , GetAt zwraca wskaźnik typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana tylko po prawej stronie instrukcji przypisania, a tym samym chroni listę przed modyfikacją.

Jeśli dostęp do listy jest uzyskiwany bezpośrednio lub za pośrednictwem wskaźnika do CTypedPtrListelementu , GetAt zwraca odwołanie do wskaźnika typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana po obu stronach instrukcji przypisania, a tym samym umożliwia modyfikowanie wpisów listy.

Uwagi

Nie jest ona taka sama jak indeks i nie można samodzielnie pracować z wartością POSITION. GetAtCObject pobiera wskaźnik skojarzony z daną pozycją.

Upewnij się, że wartość POSITION reprezentuje prawidłową pozycję na liście. Jeśli jest on nieprawidłowy, oznacza to, że wersja debugowania biblioteki klas programu Microsoft Foundation jest asercyjna.

Ta funkcja śródliniowa wywołuje metodę BASE_CLASS::GetAt.

CTypedPtrList::GetHead

Pobiera wskaźnik reprezentujący element główny tej listy.

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

Parametry

TYPU
Parametr szablonu określający typ elementów przechowywanych na liście.

Wartość zwracana

Jeśli dostęp do listy jest uzyskiwany za pośrednictwem wskaźnika do const CTypedPtrListelementu , GetHead zwraca wskaźnik typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana tylko po prawej stronie instrukcji przypisania, a tym samym chroni listę przed modyfikacją.

Jeśli dostęp do listy jest uzyskiwany bezpośrednio lub za pośrednictwem wskaźnika do CTypedPtrListelementu , GetHead zwraca odwołanie do wskaźnika typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana po obu stronach instrukcji przypisania, a tym samym umożliwia modyfikowanie wpisów listy.

Uwagi

Przed wywołaniem metody GetHeadupewnij się, że lista nie jest pusta. Jeśli lista jest pusta, zostanie asercyjna wersja debugowania biblioteki klas programu Microsoft Foundation. Użyj funkcji IsEmpty , aby sprawdzić, czy lista zawiera elementy.

CTypedPtrList::GetNext

Pobiera element listy zidentyfikowany przez element rPosition, a następnie ustawia wartość rPosition na wartość POSITION następnego wpisu na liście.

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

Parametry

TYPU
Parametr szablonu określający typ elementów zawartych na tej liście.

Położenie rPosition
Odwołanie do wartości POSITION zwróconej przez poprzednie GetNextwywołanie funkcji , GetHeadPositionlub innej składowej.

Wartość zwracana

Jeśli dostęp do listy jest uzyskiwany za pośrednictwem wskaźnika do const CTypedPtrListelementu , GetNext zwraca wskaźnik typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana tylko po prawej stronie instrukcji przypisania, a tym samym chroni listę przed modyfikacją.

Jeśli dostęp do listy jest uzyskiwany bezpośrednio lub za pośrednictwem wskaźnika do CTypedPtrListelementu , GetNext zwraca odwołanie do wskaźnika typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana po obu stronach instrukcji przypisania, a tym samym umożliwia modyfikowanie wpisów listy.

Uwagi

Można użyć GetNext w pętli iteracji przesyłania dalej, jeśli ustanowisz pozycję początkową z wywołaniem lub GetHeadPositionCPtrList::Find.

Upewnij się, że wartość POSITION reprezentuje prawidłową pozycję na liście. Jeśli jest on nieprawidłowy, oznacza to, że wersja debugowania biblioteki klas programu Microsoft Foundation jest asercyjna.

Jeśli pobrany element jest ostatnim elementem na liście, nowa wartość elementu rPosition jest ustawiona na wartość NULL.

Istnieje możliwość usunięcia elementu podczas iteracji. Zobacz przykład CObList::RemoveAt.

CTypedPtrList::GetPrev

Pobiera element listy zidentyfikowany przez element rPosition, a następnie ustawia wartość rPosition na wartość POSITION poprzedniego wpisu na liście.

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

Parametry

TYPU
Parametr szablonu określający typ elementów zawartych na tej liście.

Położenie rPosition
Odwołanie do wartości POSITION zwracanej przez poprzednie GetPrev lub inne wywołanie funkcji składowej.

Wartość zwracana

Jeśli dostęp do listy jest uzyskiwany za pośrednictwem wskaźnika do const CTypedPtrListelementu , GetPrev zwraca wskaźnik typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana tylko po prawej stronie instrukcji przypisania, a tym samym chroni listę przed modyfikacją.

Jeśli dostęp do listy jest uzyskiwany bezpośrednio lub za pośrednictwem wskaźnika do CTypedPtrListelementu , GetPrev zwraca odwołanie do wskaźnika typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana po obu stronach instrukcji przypisania, a tym samym umożliwia modyfikowanie wpisów listy.

Uwagi

Można użyć GetPrev w pętli iteracji odwrotnej, jeśli ustanowisz pozycję początkową za pomocą wywołania metody GetTailPosition lub Find.

Upewnij się, że wartość POSITION reprezentuje prawidłową pozycję na liście. Jeśli jest on nieprawidłowy, oznacza to, że wersja debugowania biblioteki klas programu Microsoft Foundation jest asercyjna.

Jeśli pobrany element jest pierwszym elementem na liście, nowa wartość elementu rPosition jest ustawiona na wartość NULL.

CTypedPtrList::GetTail

Pobiera wskaźnik reprezentujący element główny tej listy.

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

Parametry

TYPU
Parametr szablonu określający typ elementów przechowywanych na liście.

Wartość zwracana

Jeśli dostęp do listy jest uzyskiwany za pośrednictwem wskaźnika do const CTypedPtrListelementu , GetTail zwraca wskaźnik typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana tylko po prawej stronie instrukcji przypisania, a tym samym chroni listę przed modyfikacją.

Jeśli dostęp do listy jest uzyskiwany bezpośrednio lub za pośrednictwem wskaźnika do CTypedPtrListelementu , GetTail zwraca odwołanie do wskaźnika typu określonego przez typ parametru szablonu TYPE. Dzięki temu funkcja może być używana po obu stronach instrukcji przypisania, a tym samym umożliwia modyfikowanie wpisów listy.

Uwagi

Przed wywołaniem metody GetTailupewnij się, że lista nie jest pusta. Jeśli lista jest pusta, zostanie asercyjna wersja debugowania biblioteki klas programu Microsoft Foundation. Użyj funkcji IsEmpty , aby sprawdzić, czy lista zawiera elementy.

CTypedPtrList::RemoveHead

Usuwa element z nagłówka listy i zwraca go.

TYPE RemoveHead();

Parametry

TYPU
Parametr szablonu określający typ elementów przechowywanych na liście.

Wartość zwracana

Wskaźnik wcześniej na czele listy. Ten wskaźnik jest typu określonego przez typ parametru szablonu TYPE.

Uwagi

Przed wywołaniem metody RemoveHeadupewnij się, że lista nie jest pusta. Jeśli lista jest pusta, zostanie asercyjna wersja debugowania biblioteki klas programu Microsoft Foundation. Użyj funkcji IsEmpty , aby sprawdzić, czy lista zawiera elementy.

CTypedPtrList::RemoveTail

Usuwa element z końca listy i zwraca go.

TYPE RemoveTail();

Parametry

TYPU
Parametr szablonu określający typ elementów przechowywanych na liście.

Wartość zwracana

Wskaźnik wcześniej na ogonie listy. Ten wskaźnik jest typu określonego przez typ parametru szablonu TYPE.

Uwagi

Przed wywołaniem metody RemoveTailupewnij się, że lista nie jest pusta. Jeśli lista jest pusta, zostanie asercyjna wersja debugowania biblioteki klas programu Microsoft Foundation. Użyj funkcji IsEmpty , aby sprawdzić, czy lista zawiera elementy.

CTypedPtrList::SetAt

Ta funkcja składowa wywołuje metodę BASE_CLASS::SetAt.

void SetAt(POSITION pos, TYPE newElement);

Parametry

Poz
Pozycja elementu do ustawienia.

TYPU
Typ elementów przechowywanych na liście klas bazowych.

newElement
Wskaźnik obiektu do zapisania na liście.

Uwagi

Zmienna typu POSITION jest kluczem listy. Nie jest ona taka sama jak indeks i nie można samodzielnie pracować z wartością POSITION. SetAt zapisuje wskaźnik obiektu na określonej pozycji na liście.

Upewnij się, że wartość POSITION reprezentuje prawidłową pozycję na liście. Jeśli jest on nieprawidłowy, oznacza to, że wersja debugowania biblioteki klas programu Microsoft Foundation jest asercyjna.

Aby uzyskać bardziej szczegółowe uwagi, zobacz CObList::SetAt.

Zobacz też

Przykład MFC COLLECT
Wykres hierarchii
Klasa CPtrList
Klasa CObList