Diciamo che ho una classe con due metodi generici:metodi generici tipo di inferenza
TMyClass = class
procedure DoWith<T: class> (obj: T);
procedure DoFor<T: class> (proc: TProc<T>);
end;
Ora, quando voglio chiamare uno di questi due metodi con un parametro di tipo specifico, Delphi può dedurre il tipo per la DoWith
metodo, così posso chiamarla sia con
MyClass.DoWith <TButton> (MyButton)
o
MyClass.DoWith (MyButton)
Il compilatore Delphi compilerà felicemente entrambi. Ma se tralascio il parametro di tipo nel metodo DoFor
, il compilatore Delphi lamenta il parametro di tipo mancante:
MyClass.DoFor<TButton>(procedure (Button: TButton) begin .... end); // compiles
MyClass.DoFor(procedure (Button: TButton) begin .... end); // doesn't compile
Ora la mia domanda è: E 'solo una lacuna del compilatore, o c'è alcuna ragione logica (che non ho ancora capito) che impedisce al compilatore di inferire correttamente il tipo per il metodo DoFor
?
Sembra una limitazione del compilatore. L'inferenza di tipo generico è molto debole in Delphi. –