Size: a a a

2020 March 11

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
если метод виртуальный, зачем женерики?
ммм.. за всем 🙂
честно, с трудом понимаю проблему
есть реальный кейс? (только на не 1000 строк)
источник

Дt

Дмитрий texnix 🇨🇳 in Delphi & Lazarus
подскажите, как этому дебагеру запретить лезть в компоненты?
источник

Дt

Дмитрий texnix 🇨🇳 in Delphi & Lazarus
я уже и пасы спрятал, одни DCU оставил, а он всё равно хочет пасы смотреть
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
насчет компараторов - вот есть метод sort<T>(), который сортирует массив. как передать компаратор ему? виртуальный метод не предлагать
компаратор, как правило задается в конструкторе (если говорить о коллекции)
для стандартных типов берется стандартный компаратор согласно таблице

ну либо компаратор передается в аргументе

я видимо не до конца понимаю проблему. что не так?
давай все-таки на реальном кейсе, чтобы было точно ясно, что не так
источник

DB

Dmitry Belkevich in Delphi & Lazarus
вот у меня компаратор обобщенно работает:

if TComparer<T>.Default.Compare(Arr[i], Item) = 0
источник

DB

Dmitry Belkevich in Delphi & Lazarus
лучше на примере конечно смотреть что там
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
компаратор, как правило задается в конструкторе (если говорить о коллекции)
для стандартных типов берется стандартный компаратор согласно таблице

ну либо компаратор передается в аргументе

я видимо не до конца понимаю проблему. что не так?
давай все-таки на реальном кейсе, чтобы было точно ясно, что не так
куда реальнее-то? что такое компаратор, который передается в конструктор? интерфейс?
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
куда реальнее-то? что такое компаратор, который передается в конструктор? интерфейс?
да
источник

GB

George Bakhtadze in Delphi & Lazarus
т.е. мы будем при сортировке для каждого сравнения вызывать метод интерфейса?
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
т.е. мы будем при сортировке для каждого сравнения вызывать метод интерфейса?
да
источник

GB

George Bakhtadze in Delphi & Lazarus
замечательно. только зачем тогда женерик? передал этот интерфейс и вызывай с него compare(v1, v2)
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
замечательно. только зачем тогда женерик? передал этот интерфейс и вызывай с него compare(v1, v2)
ты так говоришь, как будто женерик - это только сравнение.
с женериками ты пишешь обобщенный код.
и, если что, компаратор (интерфейс) тоже обобщенный, что позволяет избегать кастов
источник

GB

George Bakhtadze in Delphi & Lazarus
а тот вариант, который пытаюсь использовать я, предполагает compile-time параметризацию классом, содержащим невиртуальные методы. можно даже статические.
при сортировке, этот метод будет вызываться и может быть заинлайнен. т.е. для реализаций типа v1 < v2 это в коде так и будет. вот для этого женерики нужны, да
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
ты так говоришь, как будто женерик - это только сравнение.
с женериками ты пишешь обобщенный код.
и, если что, компаратор (интерфейс) тоже обобщенный, что позволяет избегать кастов
ну по сути и получается, что единственное применение женериков в дельфи сейчас - избегание тайпкастов. по мне так этого мало для такой мощной технологии
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
а тот вариант, который пытаюсь использовать я, предполагает compile-time параметризацию классом, содержащим невиртуальные методы. можно даже статические.
при сортировке, этот метод будет вызываться и может быть заинлайнен. т.е. для реализаций типа v1 < v2 это в коде так и будет. вот для этого женерики нужны, да
получается у тебя какое-то свое видение
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
получается у тебя какое-то свое видение
какое свое? в FPC коллекции так работают. В С++ тоже. какие еще видения есть?
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
ну по сути и получается, что единственное применение женериков в дельфи сейчас - избегание тайпкастов. по мне так этого мало для такой мощной технологии
да нет же.
ты пишешь типонезависимый код.
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
какое свое? в FPC коллекции так работают. В С++ тоже. какие еще видения есть?
твоя единственная претензия в том, что нельзя сравнивать простые типы без компаратора?
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
да нет же.
ты пишешь типонезависимый код.
как же типонезависимый, если всегда поле имеет тип констрейнта? а не тот, которым параметризрован класс
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
как же типонезависимый, если всегда поле имеет тип констрейнта? а не тот, которым параметризрован класс
нет, поле имеет реальный тип, те который ты указал.
есть баг с тем, что неверно интерпретируется вызов обычного, невиртуального метода
источник