У меня есть проект, который должен компилироваться в Delphi и FPC, с общими процедурами класса. Они компилируются в Delphi и FPC.
Вызовы этих процедур компилируются только в Delphi. Для FPC должна быть дана специализация универсальных типов.
Я хочу опустить эту специализацию в вызовах, потому что в проекте может быть тысячи таких вызовов для этих процедур. Я должен был бы выбрать соответствующие типы для каждого звонка.
Однако с добавлением специализаций в вызовах все компилируется в обоих направлениях.
// упрощенный пример универсальной функции класса
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
interface
type
TMyClass = class
class function MyFunc<A, B> ( bool : boolean;
var Data : A;
var Key : B): cardinal;
end;
implementation
class function TMyClass.MyFunc<A, B>( bool : boolean;
var Data : A;
var Key : B): cardinal;
begin
// do something
end;
procedure callGen;
var
i : integer;
s : string;
begin
TMyClass.MyFunc(true,i, s);// compiles only to delphi
TMyClass.MyFunc<integer, string>(true,i, s);// compiles in both directions
end;
Я хочу опуститьвставка <integer, string>
в вызове, поскольку в проекте существует огромное количество различных типов для вставки, и существует еще больше вызовов.
Сообщение об ошибке в Lazarus для
TMyClass.MyFunc(true,i, s);
Неустранимо: синтаксическая ошибка, ")" ожидается, но "," найдено