使用泛型时如何处理Delphi Simple类型?

使用泛型时如何处理Delphi Simple类型?,第1张

概述一个小例子 TTest<T> = classprivate f : T;public function ToString : string;end; 如果是一个对象,那么这应该工作 TTest<T>.ToString;begin Result := f.ToString;end; 但是当说整数时会发生什么?这在.net中可以.当然. 我知道它不起作用,但我如何编写它来处理对象 一个小例子

TTest<T> = classprivate  f : T;public  function ToString : string;end;

如果是一个对象,那么这应该工作

TTest<T>.ToString;begin  Result := f.ToString;end;

但是当说整数时会发生什么?这在.net中可以.当然.

我知道它不起作用,但我如何编写它来处理对象和简单类型

解决方法 Delphi不允许你在第二个例子中做你想做的事情有三个原因 – 在一个无约束类型参数类型的值上调用ToString方法(或者至少是我认为你试图显示的那个,因为TObject.ToString是一个实例方法,而不是一个类方法,所以T.ToString甚至不能用于TObject).

> Delphi没有root类型系统,并且所有类型都很少有共同的 *** 作.这些 *** 作 – 复制,分配,创建位置(字段,本地,参数,数组) – 是唯一可以保证在类型参数的所有可能值上可用的 *** 作.
>从1开始,为什么 *** 作仅限于这些?为什么不允许泛型类中的 *** 作,只在实例化时给出错误?好吧,第一部分原因是该设计最初旨在最大限度地兼容.NET和dccil,因此.NET泛型不允许的东西在Win32泛型设计中没有显着的可用性.
>设计的第二个理由是,在实例化时只检查是有问题的.使用这种方法的最着名的参数多态实现是C模板,它也以其神秘的错误消息而闻名,例如,尝试将错误的迭代器传递给算法,并得到关于未找到重载运算符的奇怪抱怨.多态性越深,问题就越严重.实际上,C本身以C 0x Concepts的形式纠正这个错误是非常糟糕的.

希望您现在明白为什么不能保证通过约束无法保证可以使用的 *** 作.但是,如Gamecat建议的那样,通过以方法引用或接口实现的形式提供 *** 作,您可以相对容易地摆脱此限制.

将来,Delphi for Win32中的泛型可能会沿着类似的行扩展到C 0x Concepts或Haskell类型类,这样类型参数可能会受限于某些方法,函数和运算符可用.如果它沿着类型类行,那么类型推断也可以以这种方式进行.

总结

以上是内存溢出为你收集整理的使用泛型时如何处理Delphi Simple类型?全部内容,希望文章能够帮你解决使用泛型时如何处理Delphi Simple类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存