Разработать шаблон классов TTemplateQueue для обработки очередей на базе циклических массивов. Шаблонизированный тип данных должен использоваться в качестве типа элемента очереди. Шаблон должен реализовывать интерфейс IEnumerable для поддержки языковой конструкции for .. in . Для использования конструкции for .. in следует разработать промежуточный класс, реализующий интерфейс IEnumerator (данный интерфейс предполагает перебор элементов класса TObject, что следует учитывать либо в механизмах хранения содержимого очереди, либо возвращать указатели на элементы очереди, приведенные к типу TObject). Подробнее об итераторах: здесь и здесь. Шаблон должен предусматривать хранение своего содержимого в потоке. Содержимое класса:
// создание-уничтожение
Constructor Create(maxcount:integer);
Destructor Destroy;
// шаблонизированные методы
procedure put ...;
function get ...;
// обычные методы
function empty:boolean;
function full:boolean;
// работа с потоком
Constructor Create(stream:tstream);
Procedure Store(stream:TStream);
Procedure Load(stream:TStream);
// реализация интерфейса IEnumerator
...