2012-02-19 50 views
7

增強ptr_list documentation指出容器使用基礎std::list<void*>爲什麼boost :: ptr_list使用底層void *?

爲什麼他們使用這種類型而不是更專業的std::list<T*>

+0

很難說,因爲我沒有關於提升的想法。但我可以看到的連接是void *可以被類型化爲任何類型,所以它可能會使它與T *類似,正如你所談論的那樣。任何方式都會急切地等待來自我們社會其他受尊敬成員的答案 – Invictus 2012-02-19 17:50:15

回答

8

這可能會減少模板實例的數量。如果它使用std::list<T*>,那麼ptr_list<T>的每次使用也將實例化std::list<T*>。如果你使用ptr_list很多,這是很多實例。

+0

有道理。似乎有點哈克。 – 2012-02-19 19:45:01

3

這可以很容易地分享幾乎所有的代碼,而不管實例化它的類型如何。幾乎所有的代碼都在單個std::list<void *>中。每個實例只添加代碼,以便在需要時在T *void *之間進行投射。當然,現代編譯器/鏈接器可以在沒有這種幫助的情況下完成相當多的工作,但情況並非總是如此(並且由於各種原因,有些人仍然使用較老的工具鏈)。

+0

我不明白你的意思:boost :: ptr_list和std :: list是模板,所以它們應該適用於任何基礎類型,它不是'它呢?爲什麼需要使用void *? – 2012-02-19 19:42:11

相關問題