Size: a a a

2020 April 13

ГМ

Геннадий Малинин in Delphi & Lazarus
Viktor Akselrod
ты спрашивал про Constraints. для энумов нет возможности такое сделать
Constraints?
источник

VA

Viktor Akselrod in Delphi & Lazarus
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
А, про ограничение. Да. Просто не понял сходу на англ.
Я кидал ссылку. Там был общий класс для перечисляемых типов System.Enum. Сейчас его кстати нет в среде
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
А статьи с ним ещё есть
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
В статье скорее всего дотнетовская реализация паскаля.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Геннадий Малинин
А, про ограничение. Да. Просто не понял сходу на англ.
Я кидал ссылку. Там был общий класс для перечисляемых типов System.Enum. Сейчас его кстати нет в среде
а я не совсем прав.
для value types есть сonstraint record
это не ограничит только enum`ами, но в целом решит задачу
источник

SB

Sergey Bodrov in Delphi & Lazarus
Есть два класса, `TVader = class` и `TLuke = class(TVader)`. И для них есть TSkywalkerList = TList<T>. Можно ли ограничить лист только классами TVader и TLuke, или для них нужно создавать интерфейс?
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
Есть два класса, `TVader = class` и `TLuke = class(TVader)`. И для них есть TSkywalkerList = TList<T>. Можно ли ограничить лист только классами TVader и TLuke, или для них нужно создавать интерфейс?
Попробуй через запятую
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Есть два класса, `TVader = class` и `TLuke = class(TVader)`. И для них есть TSkywalkerList = TList<T>. Можно ли ограничить лист только классами TVader и TLuke, или для них нужно создавать интерфейс?
ты хочешь ограничить и любых потомков TVader кроме TLuke?
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
Есть два класса, `TVader = class` и `TLuke = class(TVader)`. И для них есть TSkywalkerList = TList<T>. Можно ли ограничить лист только классами TVader и TLuke, или для них нужно создавать интерфейс?
<T: TVader, TLuke>
источник

SB

Sergey Bodrov in Delphi & Lazarus
A type parameter may be constrained by zero or one instance of the reserved word "class".
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
Есть два класса, `TVader = class` и `TLuke = class(TVader)`. И для них есть TSkywalkerList = TList<T>. Можно ли ограничить лист только классами TVader и TLuke, или для них нужно создавать интерфейс?
А вообще, у тебя же TLuke наследуется от TVader
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Укажи TLuke
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
ты хочешь ограничить и любых потомков TVader кроме TLuke?
Да.
источник

VA

Viktor Akselrod in Delphi & Lazarus
вряд ли. наследников не получится ограничить
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Viktor Akselrod
вряд ли. наследников не получится ограничить
++
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Тогда интерфейс
источник

AW

Alex Wow in Delphi & Lazarus
Вообще идея пришла
источник

AW

Alex Wow in Delphi & Lazarus
А не ,забей )
источник

SB

Sergey Bodrov in Delphi & Lazarus
Не хочется делать интерфейсы там, где достаточно record. Это для маршрутизатора на карте. Там десятки тысяч точек (перекрестков) и линий (дорог), которые могут быть с дополнительными извращениями (круговое движение, развязка, одностороннее движение, разводной мост, платная дорога, сезонная дорога, итд..). И нужно их как-то в один общий список запихать. В С++ типизация мягкая, утиная, по совпадению методов, причем даже не по сигнатуре, а по размеру параметров. То есть запросто можно положить шило, а взять мыло. И на Паскаль эти извраты непросто перевести.
источник