Преобразование свободного Pascal в Delphi - общие параметры по умолчанию T

Я родовое TVolume < T > = класс ( TObject ) // T имеет в числовом / поплавке типа конструктор Create ( pSizeX , pSizeY , pDepth : целое ; с : T = 0 ); конструктор Create ( Оригинал : TBits ; pFalse : T = - 0.5 ; pTrue : T = + 0,5 ); rying E2268: Параметры этого типа не могут иметь значения по умолчанию для конвертации некоторого кода Free Pascal для компиляции с Delphi 10.2.

Код Free Pascal структурирован следующим образом:

TVolume<T> = class(TObject)
    constructor Create(pSizeX, pSizeY, pDepth: integer); overload;
    constructor Create(pSizeX, pSizeY, pDepth: integer; c: T); overload;

    constructor Create(Original: TBits); overload;
    constructor Create(Original: TBits; pFalse: T); overload;
    constructor Create(Original: TBits; pFalse: T; pTrue: T); overload;

Delphi не нравится: T

Я думаю, причина в том, что компилятор Delphi не хочет делать предположений о том, какой тип T может быть, поэтому он отказывается компилировать это. Этот вопрос касается FPC, я бы сказал.

Чтобы обойти это, я, скорее всего, должен создать кучу Tметодов:

TVolume

Но мне все еще интересно, есть ли способ сделать это в Delphi, о котором я еще не знаю?

delphi,migration,freepascal,

1

Ответов: 1


2

Простой ответ на этот вопрос:

Нет , нет способа передать параметры по умолчанию для типа 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.

Спасибо Руди Велтиусу , Реми Лебо и Дэвиду Хеффернану за их помощь и вклад, чтобы разобраться в этом. :)

Дельфы, миграция, FreePascal,
Похожие вопросы