Простой ответ на этот вопрос:
Нет , нет способа передать параметры по умолчанию для типа Generic
T
в Delphi, потому что типT
неизвестен во время объявления. А поскольку Delphi является компилятором TVolume <T> -pass, он этого не позволяет.
Free Pascal реализует двухпроходную обработку Generics . Вот почему он может задерживать генерацию кода для Generic, пока не столкнется с специализацией при реализации.
В этом конкретном случае мы обнаружили, что общее объявление TNNetVolume = class (specialize TVolume<TNeuralFloat>)
вообще не требуется. Во всем проекте Free Pascal TNeuralFloat
реализуется только один раз Single
. TVolume<T>
имеет тип Single
. Таким образом, общее объявление TVolume
может быть изменено, T
и все ссылки T
могут быть заменены TNeuralFloat
. Это работает и может быть скомпилировано в Delphi.
Спасибо Руди Велтиусу , Реми Лебо и Дэвиду Хеффернану за их помощь и вклад, чтобы разобраться в этом. :)