2010-08-24 40 views
3

對於大多數C++項目,Boost涵蓋大量的地面組件,但經常使用的解決方案和習語需要一些鍋爐板或地面工作。你認爲什麼如此重要以至於你在每個項目中都擁有它,因此將它放在一個小型「圖書館」中? 有些事情,我認爲:在公共庫中找不到哪些組件對C++項目至關重要?

  • 辛格爾頓基類(有人會認爲他需要它,這樣他就可以做正確)
  • ScopeGuard
  • 廠基類
  • any_iterator

(後兩個在Loki,但Loki與Boost重疊,人們不願意使用它。)

編輯:我可能應該補充一點,我不問標準庫的常用擴展名,例如copy_if

+3

這應該是社區Wiki。 – 2010-08-24 17:15:11

+0

不是auto_ptr/unique_ptr的範圍守衛嗎?另外我不認爲有可能編寫一個Singleton基類,如果是的話,它應該被鎖定,所以沒有人使用它。 – DanDan 2010-08-24 17:18:37

+0

爲什麼呢,@Thomas?有人最終發表了關於什麼應該和不應該是CW的指南? – 2010-08-24 17:32:44

回答

2

也許其他人(用C++了專業六年),我不寫代碼的數量巨大,但我會用:沒什麼。任何時候我都希望一個成語在標準庫或Boost中,這是一條線索,也許這不是最好的方法。通常情況下,您可以通過重寫它們以利用現有構造來更簡單地表達您的概念。好的代碼是簡單的代碼。讓Boost背後的天才爲你照顧複雜的東西。

0

環形或環形緩衝區。這是嵌入式系統中常用的數據結構。

2

我的小圖書館,我跟大多數項目隨身攜帶含有非常實用的工具:

  • 斷言公用事業(釋放&調試與細節和按鈕「開始調試」用戶對話框中斷言,「忽略此斷言「,」總是忽略..「)
  • 緩衝實用程序來避免與工作‘普通’堆陣列(類HeapBuffer和類SharedHeapBuffer與參考計數)
  • 測井設施
  • UTF8/UCS2編碼/解碼
  • 配置實用程序(類CfgValue與一種-liner字符串到數/布爾轉換方法)
  • 一些快速字符串到數字和數字到串例程
  • 快速浮到int轉換例程
  • 爆炸/內爆上隔板util的數字/串伊蒂埃斯
  • ini文件解析器&作家
  • 定時器類和一些快速&骯髒的分析工具
  • 互斥,條件R/W-鎖,多線程工具(但我不時更換越來越多的與升壓鎖和螺紋公用事業)
  • 輕量級消息系統「建構套件」(消息,端口,發送器,處理程序,水槽,調度員,路由器,螺紋水槽,線程池水槽等)
0
+0

你列出的所有東西都是通用的庫,所以看起來你根本沒有真正回答過這個問題。 – 2010-08-24 21:00:58

0

日誌類(即也能在一個GUI)

0

的加密庫或兩個包裝在一個不錯的界面。

散列算法也可能非常有用。

5

以上都不是。特別是,絕對不是Singleton類,因爲使用Singletons通常是的designflaw。在過去的15年裏,我從來不需要一個Singleton課程,而我在旅行中發現的所有課程都是被黑客攻擊或以其他方式損害了系統的穩健性。

一般來說,除了一個好的標準,標準兼容編譯器,希望永不停止學習更多關於我的選擇語言和編碼標準的知識,這些標準不會限制我的動作,我發現我無需編寫完整的系統。

特別值得一提的是,在過去的15年裏,我所有的工作都專門禁止使用Boost。雖然我在我自己的項目中使用了Boost,但在我使用的小工具中,我的生產代碼都沒有使用它。我是Boost的粉絲,但我並沒有真的錯過它。現在在VS2010中支持C++ 0x,我更加想念它。

這就是說,多年來,我已經制作了一個#include圖書館,無論我走到哪裏,我都會帶着有用的小東西和小玩意兒。它包括:

  • 例外框架
  • sprintf版本已經與std::string
  • 高分辨率定時器類我使用,主要用於開發,壓力測試&調試
  • transform_if的實施工作
  • 執行copy_if

和其他一些我很少使用的STL擴展。

+0

我已經構建了一個類似的工具箱,其中還包括用於STL容器的漂亮打印(我希望能夠轉儲它們),Pimpl模板實現和其他工具。請注意,如果我沒有弄錯,'copy_if'使它成爲C++ 0x。最後,我非常難過看到Boost沒有被使用。在多線程中如果沒有'boost :: shared_ptr'是非常困難的,我肯定會重新實現它... – 2010-08-24 19:11:01

2

沒有你建議的。

一個單例是一個可怕的反模式,我想在我的C++程序中最後一件事是更多其中。 如果你一直在爲自己的課程使用RAII,你並不需要單獨的ScopeGuard類。

工廠基地?它究竟會做什麼?在工廠之間我並沒有看到足夠的通用功能,因此值得放入單一的通用基類。我不確定你的意思是any_iterator。 :)

對於C++項目必不可少的東西是人們放在圖書館中的東西。 如果某些東西不在任何常用庫中,那麼這是因爲它不是常用的(或者因爲它必須針對單個項目進行定製,所以庫版本的價值很小)

因此,您的問題基本上可以被重新定義爲「對流行圖書館來說顯然是一種明顯的補充,這些圖書還沒有加入到它們中」,而且顯然,答案是「什麼都不是,因爲如果這個想法很明顯,圖書館作者想它也是如此,所以他們已經添加了它「

+0

我大多數人都同意,但有些東西不適合在庫中包裝:任何類型的實用程序成熟與開發人員的經驗..例如例如斷言實用程序(標準斷言太不切實際),消息傳遞系統,任何「足夠好」的「輕量級抽象」,但還不夠普遍,不足以包含在庫中。 – Frunsi 2010-08-24 18:38:30

相關問題