有沒有一種方法可以在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