Обобщенные типы данных в шаблонах классов

Синтаксическая конструкция, объявления шаблона класса, способного работать с обобщенным типом данных, не многим отличается от унаследованной еще со времен языка Object Pascal конструкции описания обычного класса. Здесь также присутствуют ключевые слова type и class, и класс-шаблон, так же как и его обыч­ный ’’коллега”, содержит поля и методы. Однако внимательный читатель обнару­жит отличительную черту шаблона — пару угловых скобок <.. .> сразу после име­ни класса:
type имя_класса<параметр_обобщенного_типа [, ...]> = class //поля и методы end;
 
 
 
 
Простейший пример использования обобщенного типа при объявлении шаблона класса предложен в листинге 
unit generics_unit;
interface
type TGenericClass<T>=class f T: T;
procedure SetT(Value:T) function GetT:T;
//объявление шаблона класса //поле обобщенного типа //метод записи в поле //метод чтения значения из поля
end;
implementation
function TGenericClass<T>.GetT: T; begin
Result:=fT; //узнаем содержимое поля end;
procedure TGenericClass<T>.SetT(Value: T); ,
begin
fT:=Value; //записываем данные в поле end; 
end.
 
 

Для объявления параметра типа мы воспользовались символом т и заключили его в угловые скобки. Класс содержит единственное поле fT универсального типа т и два метода, позволяющих записывать и считывать значение из поля.

Разобравшись с объявлением и реализацией шаблона класса, способного работать с обобщенным типом данных, попробуем воспользоваться его услугами. Лис­тинг 3.4 демонстрирует порядок обращения к экземпляру класса TGenericClass с указанием того, что он необходим нам в роли хранилища целого числа.

 

 

	var gObject: TGenericClass<integer>;
	i:integer; begin
	gObj ect:=TGenericClass<integer>.Create;
	gObject.SetT(99); //записываемзначение 99 i:=gObject.GetT; //считываем значение из класса
	. gObject.Destroy;end;

 

Ключевой элемент листинга 3.4 — это его первая строка. В ней указывается, какой тип данных должен будет задействован после создания экземпляра класса

TGenericciass. Название типа записывается в угловых скобках после имени класса, в нашем случае это целое число integer. С таким же успехом мы можем создать объект любого типа, за небольшим исключением. В параметр типа не стоит переда­вать статистические массивы, строки старого образца (short string) и записи, со­держащие разнотипные поля.

dle

Помоги проекту! Расскажи друзьям об этом сайте: