Класс 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
вместо CObList
CPtrList
этого или , средство проверка типа 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, возвращаемое предыдущим GetNext
GetHeadPosition
или другим вызовом функции-члена.
Возвращаемое значение
Если доступ к списку осуществляется с помощью указателя на объект 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по