Доброго времени суток! Уважаемые гуру, помогите с очередным глупым вопросом!
Ситуация:
Делаю свой класс - обобщенный список данных. Стандартный TList<T> при всех своих достоинствах не устраивает тем, что в его потомках я не могу обратиться к обобщенному типу как к объекту, у которого есть методы и свойства. Это нужно для создания специального класса, который дополняет список нужными мне методами, которые обращаются к методам элементов списка. Соответственно создаю свой список объектов, с обобщенными свойствами доступа к элементам списка (тип <T>), но сам список - список указателей на объекты.
Вопрос:
Как мне определить, что тип <T> в потомках соответствует объекту, а не записи или основным типам данных вроде целых, реальных чисел и т.п.? Что бы уже на этапе разработки программы обнаружилась ошибка, если определяемый потомком тип <T> не является объектом?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
13-12-2018 11:10 | Комментарий к предыдущим ответам
Кстати, ограничение типов в обобщенном классе возможно не просто классами, а конкретными классами!!!
<T: class> - тип T - только объекты
<T: TMyClass> - тип T - только объекты класса TMyClass и его потомков
13-12-2018 06:06 | Комментарий к предыдущим ответам
Ради спортивного интереса, еще один глупый вопрос: как можно создать объект заданного типа, переданного в конструктор списка в виде параметра <T>? Иначе говоря, как реализовать что то вроде:
procedure TObjectListEx<T>.Add;
var
obj: TObjectItem;
begin
obj := TObjectItem(T).Create;
Self.doAdd(obj);
end;
13-12-2018 05:58 | Комментарий к предыдущим ответам
min@y™, благодарю за подсказку. Не совсем то, что я имел ввиду, хотя и здесь есть интересные конструкции, новые для меня (ограничение типов <T> классами). Дело в том, что мне нужно обеспечить некоторыми одинаковыми методами и список и элементы списка. А для этого, у них должен быть общий предок. Можно конечно прикрутить интерфейсы...
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.