【发布时间】:2014-12-03 14:25:11
【问题描述】:
假设我有一个包含两个通用方法的类:
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 中的泛型类型推断非常弱。
标签: delphi generics type-inference