delphi – 通用方法类型推断
发布时间:2020-12-15 09:28:43 所属栏目:大数据 来源:网络整理
导读:假设我有一个包含两个泛型方法的类: TMyClass = class procedure DoWithT: class (obj: T); procedure DoForT: class ( proc: TProcT );end; 现在,当我想用??特定的类型参数调用这两个方法中的任何一个时,Delphi可以推断出DoWith方法的类型,所以我可以用它
假设我有一个包含两个泛型方法的类:
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编译器很乐意编译它们. MyClass.DoFor<TButton>(procedure (Button: TButton) begin .... end); // compiles MyClass.DoFor(procedure (Button: TButton) begin .... end); // doesn't compile 现在我的问题是:这只是编译器的一个缺点,还是有任何逻辑上的原因(我还没想到)禁止编译器正确推断DoFor方法的类型? 解决方法
它不能从TProc< T>论证推断T的原因是那时TProc< TButton>是没有任何信息的构造类型,它最初是TProc< T>.
要做到这一点,它必须从匿名方法签名中推断出不起作用的类型(我猜Barry Kelly可以更好地解释这一点,我认为他曾经写过关于lambdas的困难和Delphi中的类型推断). Delphi编译器能够实现的唯一类型推断是类型为T的参数.即使有多个参数不经常工作,如果你有多个泛型类型参数也更少. 编辑:我发现了一条评论,Barry在Delphi编译器中解释了类型推断和lambdas的困难:http://www.deltics.co.nz/blog/posts/244/comment-page-1#comment-107 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |