Различия в вызовах универсальных функций классов в Delphi и Lazarus / FPC - PullRequest
2 голосов
/ 26 октября 2019

У меня есть проект, который должен компилироваться в 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);

Неустранимо: синтаксическая ошибка, ")" ожидается, но "," найдено

...