2013-11-24 36 views
-2

我無法習慣C++的新風格。大多數STL和Boost庫都由一些凌亂的模板,typedefs和枚舉組成。模板對我來說唯一的方法是在容器類中使用它們。除此之外,我無法理解爲什麼它被廣泛使用。帶有大量模板的現代C++

如果我走得更深一點,我可以猜測他們在那裏是爲了實現編譯時計算和決策。但是,這真的有必要嗎?如果情況並非如此,那麼真正的原因是什麼?

(請不要給出元編程的因子計算示例)

+0

爲什麼不嘗試其他語言,如Java或Python? –

+0

因爲我對C++沒有模板感到舒服:) –

+3

這句話本身說明了一切:-S –

回答

2

模板並不新鮮。

是的,它們用於您提到的兩個項目。爲了性能,而不是運行時分支,以及管理代碼複雜性。

此外,模板啓用啓用擴展庫爲任意類型。考慮一下vector<>幾乎可以包含任何東西,而我們實際上不會將該支持寫入向量中。模板是模塊化的。

3

這不僅僅是編譯時計算。類型安全是確實很好,而不是在運行時可以得到的東西。模板的大量使用允許代碼使用許多不同的數據類型,同時仍然是靜態類型並確保類型安全。在我的書中這是一個巨大的勝利。

另外,模板允許根據模板參數執行不同的代碼路徑。例如,我剛寫了一個函數,它將兩個圖像合併成一個圖像。像素值溢出沒有多大意義,因此它使用saturation arithmetic。但圖像中的像素可以表示爲無符號整數(範圍[0, std::numeric_limits<std::uint*_t>::max()])或浮點數(範圍[0, 1])。飽和度邏輯根據數據類型而不同。所以我使用模板和模板專門化來允許根據像素的類型執行不同的飽和度邏輯。像這樣的東西一直與模板。