[Решено] FPC generics

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

[Решено] FPC generics

Сообщение FedeX »

Доброго дня.
Долго не программировал на паскале (приходилось писать в основном на ява) и теперь не могу разобраться как записать на паскале такой эквивалент на яве:

Код: Выделить всё

public abstract class EntityAdapter<T extends IEntity> extends BaseAdapter {


Тоесть меня интересует именно <T extends IEntity> - как сделать чтобы класс с которым работает шаблонный класс был обязательно унаследован от некоторого класса или интерфейса и в противном случае компилятор выдавал ошибку?
Аватара пользователя
AlexVinS
новенький
Сообщения: 95
Зарегистрирован: 27.01.2009 00:18:01

Сообщение AlexVinS »

На данный момент никак.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Жаль..(
А может есть хотябы возможность узнать является ли шаблонная переменная объектом? Ну тоесть так:

Код: Выделить всё

var t:T;
if (t is TObject) then ...

наверно не прокатит если T это например boolean..
Аватара пользователя
AlexVinS
новенький
Сообщения: 95
Зарегистрирован: 27.01.2009 00:18:01

Сообщение AlexVinS »

FedeX писал(а):Жаль..(
А может есть хотябы возможность узнать является ли шаблонная переменная объектом? Ну тоесть так:

Код: Выделить всё

var t:T;
if (t is TObject) then ...

наверно не прокатит если T это например boolean..


Такой вариант кстати будет почти тоже самое что <T:Tobject> - не скомпилируется для если Т не класс. Но с производным классом будет по другому. Точнее при компияции получится неявная проверка на то что параметр - это класс, а при выполнении уже проверка на реальный тип.

Вобщем пока ограничения не реализованы забудьте про них просто. Дженерики в паскале ближе к шаблонам C++ чем к собственно дженерикам (Java, C#).
Для параметра шаблона типизиция утиная. Тоесть можно вызывать _любой_ метод переменной неопределенного типа (например методы IEntity в вашем случае) как будто она объект и метод там есть, проверка проводится компилятором при специализации шаблона.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

А, спасибо, теперь понятней
Ответить