Класс CTypedPtrList

Предоставляет типобезопасную "программу-оболочку" для объектов класса CPtrList.

Синтаксис

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

Параметры

BASE_CLASS
Базовый класс типизированного класса списка указателей; должен быть классом списка указателей ( CObList или CPtrList).

TYPE
Тип элементов, хранящихся в списке базового класса.

Участники

Открытые методы

Имя Описание
CTypedPtrList::AddHead Добавляет элемент (или все элементы в другом списке) в голову списка (делает новую голову).
CTypedPtrList::AddTail Добавляет элемент (или все элементы в другом списке) в хвост списка (делает новый хвост).
CTypedPtrList::GetAt Возвращает элемент в заданной позиции.
CTypedPtrList::GetHead Возвращает головной элемент списка (не может быть пустым).
CTypedPtrList::GetNext Возвращает следующий элемент для итерации.
CTypedPtrList::GetPrev Возвращает предыдущий элемент для итерации.
CTypedPtrList::GetTail Возвращает хвостовой элемент списка (не может быть пустым).
CTypedPtrList::RemoveHead Удаляет элемент из головы списка.
CTypedPtrList::RemoveTail Удаляет элемент из хвоста списка.
CTypedPtrList::SetAt Задает элемент в заданной позиции.

Замечания

Если вы используете CTypedPtrList вместо CObListCPtrListэтого или , средство проверка типа C++ помогает устранить ошибки, вызванные несоответствием типов указателей.

Кроме того, оболочка CTypedPtrList выполняет большую часть приведения, которая потребуется при использовании CObList или CPtrList.

Так как все CTypedPtrList функции являются встроенными, использование этого шаблона значительно не влияет на размер или скорость кода.

Списки, производные от CObList них, могут быть сериализованы, но производные от CPtrList них не могут.

CTypedPtrList При удалении объекта или при удалении его элементов удаляются только указатели, а не сущности, на которые они ссылаются.

Дополнительные сведения об использовании CTypedPtrListсм. в статьях коллекции и классы на основе шаблонов.

Пример

В этом примере создается экземпляр CTypedPtrList, добавляется один объект, сериализуется список на диск, а затем удаляется объект:

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

Эта функция-член вызывает BASE_CLASS::AddHead.

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

Параметры

TYPE
Тип элементов, хранящихся в списке базового класса.

newElement
Указатель объекта, добавляемый в этот список. Допускается значение NULL.

BASE_CLASS
Базовый класс типизированного класса списка указателей; должен быть классом списка указателей (CObList или CPtrList).

pNewList
Указатель на другой объект CTypedPtrList . Элементы в pNewList будут добавлены в этот список.

Возвращаемое значение

Первая версия возвращает значение POSITION только что вставленного элемента.

Замечания

Первая версия добавляет новый элемент перед головой списка. Вторая версия добавляет еще один список элементов перед головой.

CTypedPtrList::AddTail

Эта функция-член вызывает BASE_CLASS::AddTail.

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

Параметры

TYPE
Тип элементов, хранящихся в списке базового класса.

newElement
Указатель объекта, добавляемый в этот список. Допускается значение NULL.

BASE_CLASS
Базовый класс типизированного класса списка указателей; должен быть классом списка указателей (CObList или CPtrList).

pNewList
Указатель на другой объект CTypedPtrList . Элементы в pNewList будут добавлены в этот список.

Возвращаемое значение

Первая версия возвращает значение POSITION только что вставленного элемента.

Замечания

Первая версия добавляет новый элемент после хвоста списка. Вторая версия добавляет еще один список элементов после хвоста списка.

CTypedPtrList::GetAt

Переменная типа POSITION является ключом для списка.

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

Параметры

TYPE
Параметр шаблона, указывающий тип элементов, хранящихся в списке.

position
Значение POSITION, возвращаемое предыдущим GetHeadPosition вызовом функции или Find функцией-членом.

Возвращаемое значение

Если доступ к списку осуществляется с помощью указателя на объект const CTypedPtrList, возвращает GetAt указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию только в правой части инструкции назначения и таким образом защищает список от изменения.

Если доступ к списку осуществляется напрямую или через указатель на объект CTypedPtrList, возвращает GetAt ссылку на указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию с любой стороны инструкции назначения и таким образом позволяет изменять записи списка.

Замечания

Это не то же самое, что и индекс, и вы не можете работать с значением POSITION самостоятельно. GetAt извлекает указатель, CObject связанный с заданной позицией.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

Эта встроенная функция вызывает BASE_CLASS::GetAt.

CTypedPtrList::GetHead

Возвращает указатель, представляющий головной элемент этого списка.

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

Параметры

TYPE
Параметр шаблона, указывающий тип элементов, хранящихся в списке.

Возвращаемое значение

Если доступ к списку осуществляется с помощью указателя на объект const CTypedPtrList, возвращает GetHead указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию только в правой части инструкции назначения и таким образом защищает список от изменения.

Если доступ к списку осуществляется напрямую или через указатель на объект CTypedPtrList, возвращает GetHead ссылку на указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию с любой стороны инструкции назначения и таким образом позволяет изменять записи списка.

Замечания

Перед вызовом GetHeadнеобходимо убедиться, что список не пуст. Если список пуст, то утверждается отладочная версия библиотеки классов Microsoft Foundation. Используйте IsEmpty , чтобы убедиться, что список содержит элементы.

CTypedPtrList::GetNext

Возвращает элемент списка, определяемый rPosition, а затем задает значение rPosition для следующей записи в списке.

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

Параметры

TYPE
Параметр шаблона, указывающий тип элементов, содержащихся в этом списке.

rPosition
Ссылка на значение POSITION, возвращаемое предыдущим GetNextGetHeadPositionили другим вызовом функции-члена.

Возвращаемое значение

Если доступ к списку осуществляется с помощью указателя на объект const CTypedPtrList, возвращает GetNext указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию только в правой части инструкции назначения и таким образом защищает список от изменения.

Если доступ к списку осуществляется напрямую или через указатель на объект CTypedPtrList, возвращает GetNext ссылку на указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию с любой стороны инструкции назначения и таким образом позволяет изменять записи списка.

Замечания

Вы можете использовать GetNext в цикле итерации пересылки, если установить начальную позицию с вызовом GetHeadPosition или CPtrList::Find.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

Если извлеченный элемент является последним в списке, новое значение rPosition имеет значение NULL.

Во время итерации можно удалить элемент. См. пример CObList ::RemoveAt.

CTypedPtrList::GetPrev

Возвращает элемент списка, определяемый rPosition, а затем задает значение rPosition для предыдущей записи в списке.

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

Параметры

TYPE
Параметр шаблона, указывающий тип элементов, содержащихся в этом списке.

rPosition
Ссылка на значение POSITION, возвращаемое предыдущим GetPrev или другим вызовом функции-члена.

Возвращаемое значение

Если доступ к списку осуществляется с помощью указателя на объект const CTypedPtrList, возвращает GetPrev указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию только в правой части инструкции назначения и таким образом защищает список от изменения.

Если доступ к списку осуществляется напрямую или через указатель на объект CTypedPtrList, возвращает GetPrev ссылку на указатель типа, указанного типом шаблона TYPE. Это позволяет использовать функцию с любой стороны инструкции назначения и таким образом позволяет изменять записи списка.

Замечания

Можно использовать GetPrev в цикле обратной итерации, если установить начальную позицию с вызовом GetTailPosition или Find.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

Если извлеченный элемент является первым в списке, новое значение rPosition имеет значение NULL.

CTypedPtrList::GetTail

Возвращает указатель, представляющий головной элемент этого списка.

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

Параметры

TYPE
Параметр шаблона, указывающий тип элементов, хранящихся в списке.

Возвращаемое значение

Если доступ к списку осуществляется с помощью указателя на объект 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

Эта функция-член вызывает BASE_CLASS::SetAt.

void SetAt(POSITION pos, TYPE newElement);

Параметры

pos
Позиция элемента, который необходимо задать.

TYPE
Тип элементов, хранящихся в списке базового класса.

newElement
Указатель объекта, записываемый в список.

Замечания

Переменная типа POSITION является ключом для списка. Это не то же самое, что и индекс, и вы не можете работать с значением POSITION самостоятельно. SetAt записывает указатель объекта на указанную позицию в списке.

Необходимо убедиться, что значение POSITION представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.

Дополнительные замечания см. в разделе CObList::SetAt.

См. также

Пример MFC COLLECT
Диаграмма иерархии
Класс CPtrList
Класс CObList