【C++】Boost開發指南閱讀感想

我找了半天的windows下的markdown編輯器,最後發現vs code就是最好的萬能編輯器!其他win編輯器的短板:公式都能打。

Boost是C++的準標準庫,極大豐富了C++的功能,其中有一些部分會在以後納入C++標準庫,學了有好處。
之前用Qt5作爲項目框架,比較了下qt5和boost,發現qt5某種意義上也是一個“boost”,提供了C++很多擴展功能,所以這裏也放進來比較一下。

第1章 Boost程序庫總論

無評論

第2章 時間與日期

看看就好,看評論是不怎麼使用。C++11提供了std::chrono作爲時間庫。Qt5提供了更好用的日期api。

第3章 內存管理

  1. 智能指針已經放入標準庫,比如std::unique_ptr,std::shared_ptr,std::weak_ptr。直接使用標準庫智能指針就好。
  2. boost內存池聽說很多項目也在用,api用起來相對簡單。其中議論較多的是pool.order_malloc的連續內存分配效率,有一些評論反映這個api分配內存效率不行,需要換成一次性分配大塊內存,可以保留一定的分配冗餘:boost::pool<> m_pool(CHUNK_SIZE)。此外內存池的分配溢出需要單獨考慮。

第4章 實用工具

  1. noncopyable類禁止拷貝,將拷貝函數放到private也能實現同樣的功能。
  2. auto關鍵字已經加入標準庫,模板推導等也已經加入標準庫,直接使用標準庫即可。
  3. boost的swap,assign沒有什麼大用。
  4. 剩下的內容對於非高級項目,不是特別有用。

第5章 字符串與文本處理

  1. boost提供了豐富的字符串處理api,可直接使用到std::string。Qt5提供了更加豐富的字符串處理api,而且直接就是任意文字編碼,更好用,但是隻能用在QString上。

第6章 正確性測試

無評論,其他測試工具庫有很多。

第7章 容器與數據結構

  1. std::array,哈希/散列容器std::unordered_set, std::unordered_map均已加入標準庫。Qt也做了同樣的容器。
  2. std::tuple三元數據,已經加入標準庫。
  3. 其他類型的容器我認爲不如自己造輪子或者用專業的第三方庫。

第8章 算法

有價值的內容不多。

第9章 數學與數字

  1. 爲何不用更專業的數學庫?比如Eigen,無需編譯即可用,是我的主要項目庫;CGAL;Armadillo;GSL。
  2. 隨機數api已經加入標準庫,滿足各種數學概率分佈的隨機數api都有。

第10章 操作系統相關

  1. 對於系統操作能夠跨平臺用統一的代碼實現,值得了解。此外Qt5也能夠跨平臺實現操作系統相關操作,比如任意操作系統下,遍歷目錄就一句代碼。

第11章 函數與回調

  1. std::function,std::bind,已經加入標準庫。
  2. signals2線程安全,不用signal庫;主要用於實現信號槽建立,功能解耦合。signal2觸發是同步的,不能異步。signal2尚未加入標準庫。Qt5的信號槽功能更加好用,線程安全而且可以異步。

第12章 併發編程

  1. 線程庫已經加入標準庫,直接使用。
  2. qt5也實現了多線程庫,並且信號槽與線程庫無縫對接,異步執行任務的線程結束後回調主線程的函數這一功能非常適合GUI編程。
  3. asio尚未加入標準庫,用於併發編程,可以同時使用協程和多線程,包裝了socket api。可以用於構建網絡項目,相對好用,評價較高。asio有獨立於boost的項目。

第13章 編程語言支持

無評論

第14章 其他Boost組件

  1. 正則表達式,需要編譯,qt5也有。
  2. 圖像庫,不如搞個opencv。如果僅僅是讀取圖像,qt5直接使用qimage類即可。
  3. graph,數學上的圖論數據結構,據說有工業級強度很好用。
  4. range,現在C++11可以直接使用新的for語句 for(auto &it:container) {…}
  5. 匿名函數已經加入標準庫。
  6. 模板元,常人用不到,一些模板編程功能已經加入標準庫。
  7. serialization序列化,和protobuf一樣的功能,優點是能夠序列化stl容器。實用性還可以。

結束語

工具是拿來用的,哪個好用用哪個。
注重問題、解決方法和業務。
用好的開發工具,純命令行並不好。
不考慮很高的效率,qt5可以取代boost很多功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章