Обобщенные типы

Обобщенные типы

Обобщенные типы: обзор

Обобщенным типом (generic) называется шаблон для создания класса, записи или интерфейса, параметризованный одним или несколькими типами. Класс (запись, интерфейс) образуется из шаблона класса (записи, интерфейса) подстановкой конкретных типов в качестве параметров. Параметры указываются после имени обобщенного типа в угловых скобках. Например, Stack<T> - шаблон класса списка элементов типа T, параметризованный типом T, а Stack<integer> - класс списка с элементами типа integer.

Обобщённые подпрограммы описываются здесь.

Для объявления шаблона класса используется следующий синтаксис:

type

Node<T> = class

data: T;

next: Node<T>;

public

constructor Create(d: T; nxt: Node<T>);

begin

data := d;

next := nxt;

end;

end;

Stack<T> = class

tp: Node<T>;

public

procedure Push(x: T);

begin

tp := new Node<T>(x,tp);

end;

function Pop: T;

begin

Result := tp.data;

tp := tp.next;

end;

function Top: T;

begin

Result := tp.data;

end;

function IsEmpty: boolean;

begin

Result := tp = nil;

end;

end;

Использование шаблона класса иллюстрируется ниже:

var

si: Stack<integer>;

sr: Stack<real>;

begin

si := new Stack<integer>;

sr := new Stack<real>;

for var i := 1 to 10 do

si.Push(Random(100));

while not si.IsEmpty do

sr.Push(si.Pop);

while not sr.IsEmpty do

write(sr.Pop,);

end.

Подстановка конкретного типа-параметра в обобщенный тип называется инстанцированием.