我一直在想,是否有任何理由在C++設計決定沒有一個純抽象類的任何標準庫容器?C++ stdlib容器類層次結構
我明白hash_map來自stdext命名空間,但共享一個非常相似的接口。如果我後來決定要爲特定的軟件實現我自己的地圖,我寧願有某種界面可以使用。
例
std::base_map *foo = new std::map<std::string, std::string>;
delete foo;
foo = new stdext::hash_map<std::string, std::string>;
顯然上面的例子中是不可能的,據我所知,然而,這是清單和其他標準庫容器中的類似。我明白,這不是C#或Java,但顯然在C++中沒有限制阻止這種設計,所以爲什麼它是這樣設計的,以便在類似的容器之間沒有耦合。
這將清除它,我忽略了虛函數的開銷,我理解你對靜態多態性的看法。我明白所有容器並不都具有相同的界面,但我認爲共享功能具有自己的界面。你總是可以退回到子類型,但我也明白,除非絕對必要,否則應該避免倒下投擲。感謝您的回答! :-) – chrisw 2013-02-23 13:43:42
C++的RTTI是非常有限的,你不能使用反射或任何東西來找到具體類型,所以除非你已經知道具體類型是什麼,否則你不能倒下,如果你已經知道你爲什麼使用多態? – 2013-02-23 14:01:10