Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
).
TYP
Typ elementów przechowywanych na liście klas bazowych.
Elementy członkowskie
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 CTypedPtrList
klasy , 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
TYP
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
TYP
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
TYP
Parametr szablonu określający typ elementów przechowywanych na liście.
pozycja
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 CTypedPtrList
elementu , 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 CTypedPtrList
elementu , 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. GetAt
CObject
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
TYP
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 CTypedPtrList
elementu , 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 CTypedPtrList
elementu , 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 GetHead
upewnij 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
TYP
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 GetNext
wywołanie funkcji , GetHeadPosition
lub innej składowej.
Wartość zwracana
Jeśli dostęp do listy jest uzyskiwany za pośrednictwem wskaźnika do const CTypedPtrList
elementu , 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 CTypedPtrList
elementu , 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 GetHeadPosition
CPtrList::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
TYP
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 CTypedPtrList
elementu , 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 CTypedPtrList
elementu , 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
TYP
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 CTypedPtrList
elementu , 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 CTypedPtrList
elementu , 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 GetTail
upewnij 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
TYP
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 RemoveHead
upewnij 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
TYP
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 RemoveTail
upewnij 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
pozytyw
Pozycja elementu do ustawienia.
TYP
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