我必須做出關於泛化與多態的決定。C++標準做法:虛擬接口類與模板
那麼這個場景是標準的:我想讓我的單片互相依賴的 代碼更模塊化,乾淨和可擴展。 它仍處於設計原則的變化可行的階段,我認爲它非常可取。
我會介紹純粹的虛擬基類(接口)或模板嗎?
我知道關於模板選項的基礎知識: 間接少,性能更好,更編譯 但 沒有後期綁定,等等。
STL的沒有多大用處(或沒有?)繼承和升壓的確不會。 但我認爲這些都是真正的小型基本工具,程序員每使用這兩行代碼。
我認爲繼承和後期綁定方法對於部署後甚至運行時可更新的代碼和功能的大塊代碼和功能的插件風格更爲合理。
那麼我的情況是介於兩者之間。
我不需要在運行時交換代碼段,編譯時間很好。 通常它也是一個非常重要且經常使用的功能塊,它在邏輯上不可分割成大塊。
這讓我傾向於模板解決方案。 對我來說,它也看起來更清潔。
是否有任何大的不良影響,因此仍然接口的方式 去?他們什麼時候不是? 哪些更符合標準C++風格?
我知道這是主觀的接壤,但我在 一些經驗很感興趣。我沒有Scott Meyers有效的C++ 的副本,所以我將我的希望寄託在你們身上:)
嗯,我確實看到使用模板而不是接口的一個問題:需求是完全隱含的。當你必須實現純虛函數時,你會得到它的確切簽名。但是當你看到像_AllocT或Iter這樣的模板類型時,你不知道你的類需要什麼類型,甚至不需要是類。你唯一需要知道的方法是尋找一份關於它的體面文檔,我今天嘗試創建自己的stl兼容分配器類時遇到了麻煩。 – Virus721 2015-06-11 15:23:51
「你只有通過尋找一個體面的文檔來了解它」 - 或者通過編譯和查看編譯器抱怨無法找到哪些函數,是的。此外,概念旨在解決這個問題。 (即使它是一個界面,你仍然需要找到體面的文檔。知道要覆蓋哪些函數是不夠的。你還需要知道它們的語義應該是什麼,並且界面不會告訴你)。儘管如此,你是對的。語言支持這兩個原因是有原因的。 :) – jalf 2015-06-11 15:27:27