Простой ответ на этот вопрос:
Нет , нет способа передать параметры по умолчанию для типа 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.
Спасибо Руди Велтиусу , Реми Лебо и Дэвиду Хеффернану за их помощь и вклад, чтобы разобраться в этом. :)