Скажем, у меня есть класс с двумя общими методами:Общих методы типа вывод
TMyClass = class
procedure DoWith<T: class> (obj: T);
procedure DoFor<T: class> (proc: TProc<T>);
end;
Теперь, когда я хочу вызвать любого из этих двух методов с определенным параметром типа, Delphi может определить тип для DoWith
метод, так что я могу назвать это либо
MyClass.DoWith <TButton> (MyButton)
или
MyClass.DoWith (MyButton)
Компилятор Delphi будет с удовольствием скомпилировать оба. Но если опустить параметр типа в методе DoFor
, компилятор Delphi жалуется на параметре отсутствующего типа:
MyClass.DoFor<TButton>(procedure (Button: TButton) begin .... end); // compiles
MyClass.DoFor(procedure (Button: TButton) begin .... end); // doesn't compile
Теперь мой вопрос: Является ли это просто недостаток компилятора, или есть какая-либо логическая причина (что я еще не понял), который запрещает компилятору правильно вывести тип для метода DoFor
?
Это выглядит как ограничение компилятора. В Delphi общий вывод типа очень слабый. –