有没有一种方法可以在Delphi 2010中实现静态多态性?Delphi中的静态多态性
回答
静态多态性是不可能在Delphi;泛型不是模板。与模板不同,泛型在声明时被解析,而不是在实例化时刻。这就是为什么一个编译模块(* .dcu)只需要包含泛型实体的AST表示,而从一个未被证实的C++模板声明构建AST几乎是不可能的。
从Delphi 2009开始就有泛型。结合类或接口约束,您可以使用它们实现静态多态。
不幸的是,2009年德尔福泛型支持是非常错误,所以你可能要考虑用Delphi 2010(重读你的问题,你似乎可以用D2010反正)
但泛型中的类或接口约束意味着将使用vmt(运行时开销),这仍然是动态多态。不是吗? – valentyn 2009-09-09 12:56:21
运行时间开销应该是最小的(我猜想是1个数组查询),那为什么它终究会有所作为? – jpfollenius 2009-09-09 13:28:09
数组查找和过程调用我猜。相同的虚拟函数调用开销。所以这与“如果存在动态多态性,为什么要使用静态多态性”是一样的问题。我认为当它重复很多次时会有所不同。无论如何,为什么我应该在运行时支付它,当我有编译时知道哪个函数要调用(或者不调用)。 – valentyn 2009-09-09 13:43:23
- 1. 静态多态性
- 2. C++中的多态性静态方法
- 3. 接口多态性在Delphi
- 4. Delphi中的多态性泛型
- 5. 静态类中的静态属性
- 6. 使用静态方法的多态性
- 7. 静态多态性的歧义
- 8. 多态性和静态方法
- 9. Sqlite 3.7.10和Delphi中的静态链接
- 10. Delphi Prism中的静态或类方法
- 11. 具有静态属性的静态类
- 12. C#中的静态方法的多态性和重载。
- 13. AngularJS中的“静态”属性
- 14. PHP中的静态属性
- 15. Java中的静态属性
- 16. 静态变量与静态属性
- 17. 通过静态和非静态方法访问静态属性?
- 18. 静态类中的静态变量和非静态类中的静态变量
- 19. 从JavascriptMVC中的静态方法获取静态属性的值
- 20. 静态Rails3中content_tag属性
- 21. 静态属性调用WPF中的非静态方法
- 22. 同时使用静态类中的静态属性
- 23. 静态多态性与升压变体单个访问者VS多访问者VS动态多态性
- 24. C++静态属性
- 25. C++静态而不是动态多态
- 26. 静态函数和多线程中的C++静态成员
- 27. 使用静态多态性的异构容器
- 28. 静态方法的继承和多态性
- 29. 如何避免重复代码的静态多态性
- 30. 关于CRTP静态多态性的困惑
如果你的意思是像C++模板 - 它如何适应单位概念?允许在界面部分的代码? – mghie 2009-09-09 13:13:34
Can not udnerstand单元概念如何干扰C++模板的某些功能。其实我想拥有所有可能的C++模板特征(我意识到泛型和模板是不同的),但如果Delphi编译器在通用瞬时化之后使用泛型参数验证了表达式,那么现在就足够了。例如,当T - 是泛型参数时,我不想看到“编译器错误”,并且在我使用此泛型与具体类型之前,试图调用T.do_some()。 – valentyn 2009-09-09 13:55:00
当然,在T不受约束的情况下,你需要一个编译器错误。编译器应该如何知道do_some方法存在?这是什么约束... – jpfollenius 2009-09-10 06:19:07