C++類庫

轉載自:http://blog.csdn.net/Augusdi/article/details/8989763html

基礎類node

1、C++標準庫
一、 Dinkumware C++ Library

參考站點:http://www.dinkumware.compython

P.J. Plauger編寫的高品質的標準庫。P.J. Plauger博士是Dr. Dobb's程序設計傑出獎的得到者。其編寫的庫長期被Microsoft採用,而且最近Borland也取得了其OEM的license,在其C/C+ +的產品中採用Dinkumware的庫。mysql

二、 RogueWave Standard C++ Librarylinux

參考站點:http://www.roguewave.comc++

這個庫在Borland C++ Builder的早期版本中曾經被採用,後來被其餘的庫給替換了。筆者不推薦使用。程序員

三、SGI STL正則表達式

參考站點:http://www.roguewave.com算法

SGI公司的C++標準模版庫。sql

四、STLport

參考站點:http://www.stlport.org

SGI STL庫的跨平臺可移植版本。


2、準標準庫——Boost

Boost 庫是一個通過千錘百煉、可移植、提供源代碼的C++庫,做爲標準庫的後備,是C++標準化進程的發動機之一。 Boost庫由C++標準委員會庫工做組成員發起,在C++社區中影響甚大,其成員已近2000人。 Boost庫爲咱們帶來了最新、最酷、最實用的技術,是徹徹底底的"準"標準庫。

Boost中比較有名氣的有這麼幾個庫:

Regex 
正則表達式庫

Spirit 
LL parser framework,用C++代碼直接表達EBNF

Graph 
圖組件和算法

Lambda 
在調用的地方定義短小匿名的函數對象,很實用的functional功能

Concept check 
檢查泛型編程中的concept

MPL 
用模板實現的元編程框架

Thread 
可移植的C++多線程庫

Python 
把C++類和函數映射到Python之中

Pool 
內存池管理

Smart_ptr 
5個智能指針,學習智能指針必讀,一份不錯的參考是來自CUJ的文章:

Smart Pointers in Boost,哦,這篇文章能夠查到,CUJ是提供在線瀏覽的。中文版見筆者在《Dr. Dobb's Journal軟件研發雜誌》第7輯上的譯文。

Boost 整體來講是實用價值很高,質量很高的庫。而且因爲其對跨平臺的強調,對標準C++的強調,是編寫平臺無關,現代C++的開發者必備的工具。可是Boost 中也有不少是實驗性質的東西,在實際的開發中實用須要謹慎。而且不少Boost中的庫功能堪稱對語言功能的擴展,其構造用盡精巧的手法,不要貿然的花費時間研讀。Boost另一面,好比Graph這樣的庫則是具備工業強度,結構良好,很是值得研讀的精品代碼,而且也能夠放心的在產品代碼中多多利用。

參考站點:http://www.boost.org(國內鏡像:http://www.c-view.org/tech/lib/boost/index.htm
--------------------------------------------------------------------------------------------------------------------------------

GUI

 

在衆多C++的庫中,GUI部分的庫算是比較繁榮,也比較引人注目的。在實際開發中,GUI庫的選擇也是很是重要的一件事情,下面咱們綜述一下可選擇的GUI庫,各自的特色以及相關工具的支持。

1) MFC

大名鼎鼎的微軟基礎類庫(Microsoft Foundation Class)。大凡學過VC++的人都應該知道這個庫。雖然從技術角度講,MFC是不大漂亮的,可是它構建於Windows API 之上,可以使程序員的工做更容易,編程效率高,減小了大量在創建 Windows 程序時必須編寫的代碼,同時它還提供了全部通常 C++ 編程的優勢,例如繼承和封裝。MFC 編寫的程序在各個版本的Windows操做系統上是可移植的,例如,在 Windows 3.1下編寫的代碼能夠很容易地移植到 Windows NT 或 Windows 95 上。可是在最近發展以及官方支持上日漸勢微。

2) QT

參考網站:http://www.trolltech.com

Qt 是Trolltech公司的一個多平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發者創建藝術級的圖形用戶界面所需的所用功能。Qt是徹底面向對象的很容易擴展,而且容許真正地組件編程。自從1996年早些時候,Qt進入商業領域,它已經成爲全世界範圍內數千種成功的應用程序的基礎。Qt也是流行的Linux桌面環境KDE 的基礎,同時它還支持Windows、Macintosh、Unix/X11等多種平臺。

3) WxWindows

參考網站:http://www.wxwindows.org

跨平臺的GUI庫。由於其類層次極像MFC,因此有文章介紹從MFC到WxWindows的代碼移植以實現跨平臺的功能。經過多年的開發也是一個日趨完善的 GUI庫,支持一樣不弱於前面兩個庫。而且是徹底開放源代碼的。新近的C++ Builder X的GUI設計器就是基於這個庫的。

4) Fox

開放源代碼的GUI庫。做者從本身親身的開發經驗中得出了一個理想的GUI庫應該是什麼樣子的感覺出發,從而開始了對這個庫的開發。有興趣的能夠嘗試一下。

參考網站:http://www.fox-toolkit.org/

5)   WTL

基於ATL的一個庫。由於使用了大量ATL的輕量級手法,模板等技術,在代碼尺寸,以及速度優化方面作得很是到位。主要面向的使用羣體是開發COM輕量級供網絡下載的可視化控件的開發者。

6)   GTK

參考網站:http://gtkmm.sourceforge.net/

GTK是一個大名鼎鼎的C的開源GUI庫。在Linux世界中有Gnome這樣的殺手應用。而GTK就是這個庫的C++封裝版本。

--------------------------------------------------------------------------------------------------------------------------------

網絡通訊

 

1) ACE

參考網站:http://www.cs.wustl.edu/~schmidt/ACE.html

C++庫的表明,超重量級的網絡通訊開發框架。ACE自適配通訊環境(Adaptive Communication Environment)是能夠自由使用、開放源代碼的面向對象框架,在其中實現了許多用於併發通訊軟件的核心模式。ACE提供了一組豐富的可複用C++ 包裝外觀(Wrapper Facade)和框架組件,可跨越多種平臺完成通用的通訊軟件任務,其中包括:事件多路分離和事件處理器分派、信號處理、服務初始化、進程間通訊、共享內存管理、消息路由、分佈式服務動態(重)配置、併發執行和同步,等等。

2) StreamModule

參考網站:http://www.omnifarious.org/StrMod/

設計用於簡化編寫分佈式程序的庫。嘗試着使得編寫處理異步行爲的程序更容易,而不是用同步的外殼包起異步的本質。

3) SimpleSocket

參考網站:http://home.hetnet.nl/~lcbokkers/simsock.htm

這個類庫讓編寫基於socket的客戶/服務器程序更加容易。

4) A Stream Socket API for C++

參考網站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html

又一個對Socket的封裝庫。

--------------------------------------------------------------------------------------------------------------------------------

XML

 

1) Xerces

參考網站:http://xml.apache.org/xerces-c/

Xerces-C++ 是一個很是健壯的XML解析器,它提供了驗證,以及SAX和DOM API。XML驗證在文檔類型定義(Document Type Definition,DTD)方面有很好的支持,而且在2001年12月增長了支持W3C XML Schema 的基本完整的開放標準。

2) XMLBooster

參考網站:http://www.xmlbooster.com/

這個庫經過產生特製的parser的辦法極大的提升了XML解析的速度,而且可以產生相應的GUI程序來修改這個parser。在DOM和SAX兩大主流XML解析辦法以外提供了另一個可行的解決方案。

3) Pull Parser

參考網站:http://www.extreme.indiana.edu/xgws/xsoap/xpp/

這個庫採用pull方法的parser。在每一個SAX的parser底層都有一個pull的parser,這個xpp把這層暴露出來直接給你們使用。在要充分考慮速度的時候值得嘗試。

4) Xalan

參考網站:http://xml.apache.org/xalan-c/

Xalan是一個用於把XML文檔轉換爲HTML,純文本或者其餘XML類型文檔的XSLT處理器。

5) CMarkup

參考網站:http://www.firstobject.com/xml.htm'>http://www.firstobject.com/xml.htm

這是一種使用EDOM的XML解析器。在不少思路上面很是靈活實用。值得你們在DOM和SAX以外尋求一點靈感。

6) libxml++

http://libxmlplusplus.sourceforge.net/

libxml++是對著名的libxml XML解析器的C++封裝版本 

--------------------------------------------------------------------------------------------------------------------------------

科學計算

 

1) Blitz++

參考網站:http://www.oonumerics.org/blitz/

Blitz++ 是一個高效率的數值計算函數庫,它的設計目的是但願創建一套既具像C++ 同樣方便,同時又比Fortran速度更快的數值計算環境。一般,用C++所寫出的數值程序,比 Fortran慢20%左右,所以Blitz++正是要改掉這個缺點。方法是利用C++的template技術,程序執行甚至能夠比Fortran更快。 Blitz++目前仍在發展中,對於常見的SVD,FFTs,QMRES等常見的線性代數方法並不提供,不過使用者能夠很容易地利用Blitz++所提供的函數來構建。

2) POOMA

參考網站:http://www.codesourcery.com/pooma/pooma

POOMA是一個免費的高性能的C++庫,用於處理並行式科學計算。POOMA的面向對象設計方便了快速的程序開發,對並行機器進行了優化以達到最高的效率,方便在工業和研究環境中使用。

3) MTL

參考網站:http://www.osl.iu.edu/research/mtl/

Matrix Template Library(MTL)是一個高性能的泛型組件庫,提供了各類格式矩陣的大量線性代數方面的功能。在某些應用使用高性能編譯器的狀況下,好比Intel的編譯器,從產生的彙編代碼能夠看出其與手寫幾乎沒有兩樣的效能。

4) CGAL

參考網站:www.cgal.org

Computational Geometry Algorithms Library的目的是把在計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的用戶。

--------------------------------------------------------------------------------------------------------------------------------

遊戲開發

 

1) Audio/Video 3D C++ Programming Library

參考網站:http://www.galacticasoftware.com/products/av/

AV3D是一個跨平臺,高性能的C++庫。主要的特性是提供3D圖形,聲效支持(SB,以及S3M),控制接口(鍵盤,鼠標和遙感),XMS。

2) KlayGE

參考網站:http://home.g365.net/enginedev/

國內遊戲開發高手本身用C++開發的遊戲引擎。KlayGE是一個開放源代碼、跨平臺的遊戲引擎,並使用Python做腳本語言。KlayGE在LGPL協議下發行。感謝龔敏敏先生爲中國遊戲開發事業所作出的貢獻。

3) OGRE

參考網站:http://www.ogre3d.org

OGRE (面向對象的圖形渲染引擎)是用C++開發的,使用靈活的面向對象3D引擎。它的目的是讓開發者能更方便和直接地開發基於3D硬件設備的應用程序或遊戲。引擎中的類庫對更底層的系統庫(如:Direct3D和OpenGL)的所有使用細節進行了抽象,並提供了基於現實世界對象的接口和其它類。

4) Cocos-2dx

Cocos2d-x是一個開源的移動2D遊戲框架,使用 C++ 開發,基於OpenGL ES,Cocos2d-x是Cocos2d的跨平臺版本,Cocos2d-x項目能夠很容易地創建和運行在iOS,Android,黑莓Blackberry等操做系統中。Cocos2d-x還支持Windows、Mac和Linux等桌面操做系統。

--------------------------------------------------------------------------------------------------------------------------------

線程

 

1) C++ Threads

參考網站:http://threads.sourceforge.net/

這個庫的目標是給程序員提供易於使用的類,這些類被繼承以提供在Linux環境中很難看到的大量的線程方面的功能。

2) ZThreads

參考網站:http://zthread.sourceforge.net/

一個先進的面向對象,跨平臺的C++線程和同步庫。

--------------------------------------------------------------------------------------------------------------------------------

序列化

 

1) s11n

參考網站:http://s11n.net/

一個基於STL的C++庫,用於序列化POD,STL容器以及用戶定義的類型。

2) Simple XML Persistence Library

參考網站:http://sxp.sourceforge.net/

這是一個把對象序列化爲XML的輕量級的C++庫。

--------------------------------------------------------------------------------------------------------------------------------

字符串

 

1) C++ Str Library

參考網站:http://www.utilitycode.com/str/

操做字符串和字符的庫,支持Windows和支持gcc的多種平臺。提供高度優化的代碼,而且支持多線程環境和Unicode,同時還有正則表達式的支持。

2) Common Text Transformation Library

參考網站:http://cttl.sourceforge.net/

這是一個解析和修改STL字符串的庫。CTTL substring類能夠用來比較,插入,替換以及用EBNF的語法進行解析。

3) GRETA

參考網站:http://research.microsoft.com/projects/greta/

這是由微軟研究院的研究人員開發的處理正則表達式的庫。在小型匹配的狀況下有很是優秀的表現。

--------------------------------------------------------------------------------------------------------------------------------

綜合

 

1) P::Classes

參考網站:http://pclasses.com/

一個高度可移植的C++應用程序框架。當前關注類型和線程安全的signal/slot機制,i/o系統包括基於插件的網絡協議透明的i/o架構,基於插件的應用程序消息日誌框架,訪問sql數據庫的類等等。

2) ACDK - Artefaktur Component Development Kit

參考網站:http://acdk.sourceforge.net/

這是一個平臺無關的C++組件框架,相似於Java或者.NET中的框架(反射機制,線程,Unicode,廢料收集,I/O,網絡,實用工具,XML,等等),以及對Java, Perl, Python, TCL, Lisp, COM 和 CORBA的集成。

3) dlib C++ library

參考網站:http://www.cis.ohio-state.edu/~kingd/dlib/

各類各樣的類的一個綜合。大整數,Socket,線程,GUI,容器類,以及瀏覽目錄的API等等。

4) Chilkat C++ Libraries

參考網站:http://www.c'>http://www.c'>http://www.c'>http://www.chilkatsoft.com/cpp_libraries.asp

這是提供zip,e-mail,編碼,S/MIME,XML等方面的庫。

5) C++ Portable Types Library (PTypes)

參考網站:http://www.melikyan.com/ptypes/'>http://www.melikyan.com/ptypes/

這是STL的比較簡單的替代品,以及可移植的多線程和網絡庫。

6) LFC

參考網站:http://lfc.sourceforge.net/

哦,這又是一個嘗試提供一切的C++庫

--------------------------------------------------------------------------------------------------------------------------------

其餘庫

 

1) Loki

參考網站:http://www.moderncppdesign.com/

哦,你可能抱怨我早該和Boost一塊兒介紹它,一個實驗性質的庫。做者在loki中把C++模板的功能發揮到了極致。而且嘗試把相似設計模式這樣思想層面的東西經過庫來提供。同時還提供了智能指針這樣比較實用的功能。

2) ATL

ATL(Active Template Library)是一組小巧、高效、靈活的類,這些類爲建立可互操做的COM組件提供了基本的設施。

3) FC++: The Functional C++ Library

這個庫提供了一些函數式語言中才有的要素。屬於用庫來擴充語言的一個表明做。若是想要在OOP以外尋找另外一分的樂趣,能夠去看看函數式程序設計的世界。大師 Peter Norvig在 "Teach Yourself Programming in Ten Years"一文中就將函數式語言列爲至少應當學習的6類編程語言之一。

4) FACT!

參考網站:http://www.kfa-juelich.de/zam/FACT/start/index.html

另一個實現函數式語言特性的庫

5) Crypto++

提供處理密碼,消息驗證,單向hash,公匙加密系統等功能的免費庫。

tyc611:說到密碼庫,其它還有不少其它有名的,好比Miracl、OpenSSL、TomLib等)


6) Managed C++ wrapper for ZLib

壓縮組件Zlib的C++類庫

7) CppSQLite - C++ Wrapper for SQLite

SQLite C++封裝庫

8)CxImage

圖像格式轉換

--------------------------------------------------------------------------------------------------------------------------------

其餘

Loki : Anders Alexandr的代碼庫,設計精巧,提供智能指針,Functor,TypeList等。
QT : 原本是完美的C++ GUI庫,惋惜對於商業開發要收取版權費,動輒上千美圓,惹不起。
Xerces : XML代碼庫,估計是除.Net Framework的System.XML外最好使的XML庫了,對於C++程序員,若是須要完善的XML Core Level3支持,跨平臺的,免費的XML庫,那就是它了。不過體積可不小。
Xalan : XML XSLT支持庫,配合Xerces使用,Apache的一向傳統,大而全。
TinyXml : 若是您的XML只須要支持Ansi和UTF8編碼,只須要作些簡單的XML解析,TinyXML是很好的選擇,小而精。
ICU : IBM的Unicode實現,有JAVA和C++/C兩種版本,支持各類編碼,國際化和本地化功能,可是,很龐大,8M左右。
libiconv : GNU的UNICODE實現,提供各類字符集到UNICODE之間的轉換功能,1M左右。
cURL : 從名字能夠看出來,c操做URL資源的庫,完善支持HTTP,SHTTP,FTP等協議,比WinINet好使,與正在「菸酒」中的WinHTTP有一拼。
FreeImage: 很是完善的圖像處理庫,設計很是好,用插件的方式支持多種圖像格式,GIF因版權問題除外。
IT++: 專業的數學庫。
GC6.2: C++垃圾回收器,很好使。GCC自帶,Mono中使的也是它。
libpdf : 生成PDF文件的庫,惋惜不能讀入編輯PDF文件。

--------------------------------------------------------------------------------------------------------------------------------


Changelog:

C/C++ 開發庫 | C/C++ Development Library

這裏收集一些著名的 C/C++ 開發庫、SDK、類庫、可複用類與結構代碼 等信息,列舉它們的介紹、參考和網站連接,爲各位 C/C++ 程序員和愛好者提供檢索和查閱類庫的方便。
下面收集的 C/C++ 類庫介紹整理來源於文章:C++ 資源之不徹底導引(做者:曾毅、陶文),這篇文章曾發表於 2004 年 5 月《CSDN 開發高手》。
上文中介紹的類庫有些已經多年未見發佈和網站內容的更新了,特別是一些開源的項目。我檢查了做者提供的 連接地址 和項目的 活躍程度,更改內容上的誤差並補全了重要說明。另外,增長了本身使用和了解的 C/C++ 類庫的介紹。
由於在下面的介紹中,我也有大量不曾使用和了解的開發庫、類庫,因此介紹若有紕漏和錯誤,均可以 告訴我
下面的 C/C++ 開發庫、類庫會不按期更新。

更新說明列表 (Last Update: 2011-02)

目錄

  • C/C++ 標準庫與運行時庫 | C/C++ Standard & Runtime Library
  • 模式複用與基礎功能 | Pattern Reuse & Basic Function
  • 字符串處理 | String Handling
  • 應用框架與圖形用戶界面 | Application Framework & GUI
  • 通用功能 | General Function
  • 線程 | Threads
  • 科學與並行計算 | Scientific & Parallel Computation
  • 網絡功能 | Network Communication
  • XML 功能 | XML Functions
  • 持久存儲 | Persistence & Storage
  • 加解密 | Cryptographic
  • 日誌 | Logging
  • 函數式編程 | Functional Programming
  • 雜項 | MISC
-------------------------------------------   
C/C++ 標準庫與運行時庫 | C/C++ Standard & Runtime Library


實現 ISO 的 C/C++ 語言規格標準中要求的標準庫,每一個組織或廠家的實現均有差別。在連接的二進制庫中一般還伴隨實現了平臺特定的基礎運行時庫,例如 POSIX 標準。  
ISO C/C++/POSIX 的標準以下:
Microsoft C Run-Time Libraries & Standard C++ Library
微軟的這一套運行時庫,在功能和連接庫上分爲 3 個部分:Run-Time Libraries (CRT)、Standard C++ Library、CRT for Managed Code,分別對應的動態連接庫爲:msvcr[ver].dll、msvcp[ver].dll、msvcm[ver].dll。  
VC八、VC9 採用了    Side-by-Side    (WinSxS, Manifest) 方式部署 CRT 庫,但在 VC10 中又去掉了 Side-by-Side 的部署方式。在 %SystemRoot%\system32 中有一個隨 Windows 發佈的 Known DLL:msvcrt.dll;而帶版本號 [ver] 的庫在 VC 或 VC Redistributable Package 中發佈。  
VC7 以後在 namespace stdext 中提供 hash_map、hash_set 兩個擴展標準的容器模板。  
GNU C/C++ Library
一般稱爲 GNU libc 和 libstdc++,是 GNU 的 C/C++ 標準庫和運行時庫的實現,在各類 Linux 發行版中都會安裝該庫,也是不少開源 C/C++ 程序選擇的基礎庫。另外 libc 和 libstdc++ 也被移植到各類平臺下,如 Windows 下的 MinGW 和 Cygwin 就包含 libc 和 libstdc++:  
MinGW
MinGW: Minimalist GNU for Windows,在 Windows 平臺提供一套 GNU 的開發環境,包括工具和開發庫。MinGW 中包括對 GCC 和 GNU libc、libstdc++ 的 Windows 移植。  
Cygwin
發源於 RedHat 的 Cygwin 項目,目標在於在 Windows 下創建一套 Unix/Linux 環境,包括 X Window 這種 Linux GUI 基礎庫在內,因此又叫 Cygwin/X。Cygwin 實現的重點是 cygwin1.dll,它向其它 Cygwin 程序提供 POSIX 接口,並在內部轉換成 Windows API 調用。Cygwin 中包括對 GCC 和 GNU libc、libstdc++ 的 Windows 移植。  
MinGW 和 Cygwin 的詳細介紹和開發環境的搭建,參考個人如下文章:
Tiny C Runtime Library
一個小巧的 Windows 平臺 CRT 庫實現,可用來替換對 Microsoft CRT 庫的連接,達到精簡依賴的基礎庫、減少最終發佈程序大小的做用。  
SGI STL
SGI 公司的 C++ 標準模版庫。  
STLport
SGI STL 庫的跨平臺可移植版本。  
Dinkumware C++ Library
P.J. Plauger 編寫的高品質的標準庫。P.J. Plauger 博士是 Dr. Dobb's 程序設計傑出獎的得到者。其編寫的庫長期被 Microsoft 採用,而且 Borland 也取得了其 OEM 的 license,在其 C/C++ 的產品中採用 Dinkumware 的庫。  
RogueWave Standard C++ Library
這個庫在 Borland C++ Builder 的早期版本中曾經被採用,後來被其它的庫給替換了。不推薦使用。  

模式複用與基礎功能 | Pattern Reuse & Basic Function


其實這個分類的界限很難肯定,緣由是有一些 C/C++ 庫提供各類各樣的模式形式,在功能上也一應俱全,並不專注,屬於綜合性功能。但在目標上這些庫都是一致的:增強 C/C++ 語言的功能、複用度,提供穩定的基礎功能。什麼是基礎功能?應該是那些不依賴於平臺,每一個應用可能都會用到的功能,例如:字符串、通用算法和容器等。  
Boost
Boost 是高質量、可移植、開放源代碼的 C++ 庫,做爲標準庫的後備,是 C++ 標準化進程之一。Boost 庫由 C++ 標準委員會庫工做組成員發起,在 C++ 社區中影響甚大。Boost 庫爲咱們帶來了最新、最酷、最實用的   技術   ,是徹徹底底的「準標準庫」。  
Boost 不是一個庫,而是一組庫,每個 Boost 庫都是一個相對獨立的功能(一般在一個子目錄下發布),能夠獨立連接和使用,通常稱 Boost 中的 xxx 庫爲 Boost.xxx。有些 Boost 庫根本不用編譯成二進制的靜態或動態連接庫形式,只要在應用它的源碼中 include 包含它的頭文件就能夠直接使用,稱爲 Header-Only 庫,如 Boost.Lambda。  
Boost 因爲其對跨平臺的強調,對標準 C++ 的強調,是編寫平臺無關,現代 C++ 的開發者必備的工具。可是 Boost 中也有不少是實驗性質的東西,在實際的開發中實用須要謹慎。而且不少 Boost 中的庫功能堪稱對語言功能的擴展,其構造用盡精巧的手法,不要貿然的花費   時間   研讀。Boost 另一面,好比 Graph 這樣的庫則是具備工業強度,結構良好,很是值得研讀的精品代碼,而且也能夠放心的在產品代碼中多多利用。  
另外,Boost 的官方文檔也是至關漂亮的,講述的清晰明瞭:從 概念 到 示例都有,在開源庫中是不可多得的。  
除了 Boost 發佈包中包括的庫以外,還有一些庫處於提交待審成爲 Boost 庫的狀態 (Proposal),或處於尚在測試和評審階段 (TR),Boost 發佈包中未將這些庫包含進來,能夠從這些庫的專項地址下載,例如用於日誌的   Boost.Log  庫。  
列舉 Boost 中的幾個庫:
Loki
Loki 的做者就是大名頂頂的 Andrei Alexandrescu,"Modern C++ Design"(   《C++ 設計新思惟》   )一書的做者,Boost 和    C++0x    的推進者之一。  
Loki 早期是 "Modern C++ Design" 一書的附帶類庫,是實驗和教學性質的庫。但隨着做者的維護、更新和改進,Loki 如今已經在複用性和穩定性上已逐漸成熟了。  
Loki 中把 C++ 模板的功能發揮到了極致。嘗試把相似 設計模式 這樣思想層面的東西經過庫來提供。同時還提供了智能指針這樣比較實用的功能。  
stlsoft
stlsoft 從名字均可以知道是 STL 的擴展功能庫,這一點和 Boost 的定位很像。stlsoft 的做者是 Matthew Wilson,stlsoft 也有配套的書籍 "Extended STL" 共兩卷:  
Extended STL, Volume 1: Collections and Iterators  
Extended STL, volume 2: Adaptors, Algorithms, Allocators, Functions, Ranges and Views  
stlsoft 包含一些基本的通用功能,例如字符串處理 (stlsoft/string/),固然這是基於 std::basic_string 的處理。stlsoft 最吸引人的地方是:免費 和 所有的功能都是 Header-Only 的,使用時只要包含頭文件便可。  

字符串處理 | String Handling


通用的字符串處理功能,能夠劃分到    模式複用與基礎功能 | Pattern Reuse & Basic Function    類別中,但爲了查閱方便,仍是把它分離出來了。包括:字符串的類包裹對象、格式化字符串、Tokenizer、分詞、正則表達式處理 等。固然 C/C++ 的標準庫,以及不少應用框架和 GUI 庫中,也都有字符串處理相關的功能實現(如:strtok()、std::basic_string、std::basic_stringstream、 ATL/MFC 的 CStringT 等),這裏就再也不列出這些功能了,有須要能夠參考    MSDN Library    和    www.cppreference.com     www.cplusplus.com    等一些 C/C++ 參考網站。  
Boost 中的字符串處理相關庫  
上面說了 Boost 是一套一應俱全的通用功能 C++ 庫,下面列出一些 Boost 中的和字符串處理相關的庫:

  • Boost String Algorithms Library:Boost 字符串算法庫,功能大多在頭文件 boost/algorithm/string.hpp 中集中聲明,並在 boost/algorithm/string/ 下有分別功能的定義,在名字空間 boost::algorithm 中。這個 Boost 字符串算法庫一般和標準庫的字符串實現 std::basic_string 聯用,做爲標準庫字符串功能的擴展,例如能夠作 tokenize 的算法 boost::algorithm::split() 或類 boost::algorithm::split_iterator, boost::algorithm::token_finder。

  • Boost.Tokenizer:Boost 專門提供的字符串 tokenize 分詞庫,在 boost/tokenizer.hpp 中聲明,和它相關的還有 分詞迭代器 (boost\token_iterator.hpp) 和 分詞工具類 (boost\token_functions.hpp)。

  • Boost.Regex:上面已提到了,這是 Boost 的正則表達式功能實現。

另外 Boost 中還有 lexical_cast(數值/字符串轉換)、Format(相似 printf() 的格式化)、Spirit(EBNF 解析)等和字符串/文本處理有關的庫。  
Common Text Transformation Library     http://cttl.sourceforge.net/   ,基於標準庫 std::basic_string 的字符串處理擴展功能,有 EBNF 解析功能。  
GRETA     http://research.microsoft.com/   ,微軟 Research 的正則表達式模板庫項目(已中止維護),支持 Perl 兼容的正則表達式處理。  

應用框架與圖形用戶界面 | Application Framework & GUI


通用的   應用程序   開發框架庫,一般以 GUI 爲其重要的組成部分,但毫不止於 GUI,功能上小到 字符串,中到 網絡通訊,大到 層次架構都有可能支持。而且應用框架庫不僅是庫的複用,而可能會引導程序員的程序架構設計,例如 MVC 架構。通常狀況下足以單獨依靠 某一個應用框架庫來完成程序的開發。一般能夠永葆活力的應用框架庫背後都是有實力的組織或公司,穩定性比通常的庫要強。  
MFC
MFC (Microsoft Foundation Class) 微軟基礎類庫,構建於 Windows API 之上,提供 OO 的接口風格。在 .Net Framework 成名前,MFC 是 Windows 平臺開發程序主框架的首選,如今由 .Net Framework 接過這個任務。  
ATL/WTL
ATL (Active Template Library) 是一組輕量級、高效的模板類,提供 GP 的接口風格,這些類爲建立 COM 組件提供了基本的功能。  
有一部分類和代碼在 ATL 和 MFC 之間是共享的 (ATL/MFC Shared Classes),例如 實現 CString 的 CStringT 模板。
WTL 是基於 ATL 的一個庫。使用了大量 ATL 的輕量級手法、模板等技術,在代碼尺寸,以及速度優化方面作得很是到位。主要應用目標是 COM 輕量級網絡下載的可視化控件 (ActiveX)。  
不過微軟的商業策略,包括 MFC 和風頭上的 .Net Framework,WTL 早就被微軟冷落了,最近的官方版本是 2007 年發佈的 WTL 8.0,不過在 Sourceforge 的 WTL 項目中,於 2009 年發佈了 WTL 8.1。  
wxWidgets
由社區維護的開源跨平臺 C++ 通用程序框架和 GUI 類庫。wxWidgets 原來也叫 wxWindows,但因爲微軟的緣故改名爲 wxWidgets。wxWidgets 的層次結構相似 MFC,熟悉 MFC 的人能夠很快上手 wxWidgets。wxWidgets 使用基於運行平臺的 Native API 實現,對於 Windows 來講就是 Windows API,對於 Linux 則多是 GTK+ 或 X11。  
除了 C++ 做爲開發接口語言外,wxWidgets 最著名的其它語言封裝接口是 Python 的封裝接口:   wxPython  
wxWidgets 項目的活躍程度和更新、維護一直都很穩定,是值得長久信賴的通用程序框架和 GUI 類庫。  
GTK+/gtkmm
GTK+ (GIMP Toolkit) 是一個採用面向對象設計的使用 C 語言開發的 GUI 窗口開發庫。最先做爲 GIMP 繪圖工具的基礎庫而開發。GTK+ 是 GNOME 桌面環境的基礎庫。gtkmm 是 GTK+ 的 C++ 語言封裝。  
Qt


Qt 原來是 Trolltech 公司的一個跨平臺的 C++ GUI 框架,後來被 Nokia 收購成爲其一個子部門。Qt 是另外一個著名桌面環境 KDE 的基礎庫。和 GTK+ 不一樣,Qt 一開始就選擇 C++ 做爲實現其徹底面向對象框架的開發語言。

 

通用功能 | General Function


這些庫是包含了多種功能的綜合性開發庫、類庫,通常目標是提供可移植的基礎設施服務,例如 線程、網絡功能 等。
P::Classes


活躍程度:2004-03 發佈版本 1.0.0 beta1,2005-01 網站最近消息貼出 "We are not dead!" [2010-11 checked]
一個高度可移植的 C++ 應用程序框架。當前關注類型和線程安全的 Signal/Slot 機制,I/O 系統包括基於插件的網絡協議透明的 I/O 架構,基於插件的應用程序消息日誌框架,訪問 SQL 數據庫的類等。
ACDK


活躍程度:2006-03 公告 CVS 版下載 ACDK 5 a2 [2010-11 checked]
ACDK (Artefaktur Component Development Kit) 是一個平臺無關的 C++ 組件框架,目標是實現相似於 Java 或者 .NET 中的框架,涉及的方面有:反射機制、線程、Unicode、廢料收集、正則表達式、I/O、網絡、SSL、SQL、實用工具、XML 等。還包括對 Java、Perl、Python、TCL、Lisp、COM 和 CORBA 的集成。
dlib C++ library


活躍程度:2010-11 發佈版本 17.32 [2010-11 checked]
提供多種功能的跨平臺綜合庫。涉及的方面有:數值計算 (Matrix)、網絡功能 (Socket, streambuf, HTTP server)、線程、GUI、機器學習、圖像處理(BMP 位圖)、數據壓縮與摘要、日誌、單元測試框架、命令行解析、XML 解析、容器、序列化、BASE64 編解碼、內存池管理 等。
Chilkat C++ Libraries


活躍程度:2010-07 發佈 VC6-VC10 編譯版本 9.1.0 [2010-11 checked]
提供一組庫,包括:Zip、Mail、IMAP、加解密、MHT、XML、字符集、MIME、PFX、FTP 等。
PTypes


活躍程度:2007-06 發佈版本 2.1.1 [2010-11 checked]
能夠做爲 STL 的簡單替代品,提供可移植的線程(同步對象)和網絡(Socket 和 命名管道)支持,也包括字符串、變體 (variant)、字符集、鏈表 等基礎類型的實現。主要應用目標是的網絡服務程序 和 robots 等。
LFC


活躍程度:2002-06 發佈版本 0.5 [2010-11 checked]
一個提供通用目標的 C++ 類庫、框架,涉及的方面有:通用數據結構、通用算法、文件、Socket、線程、GUI、數據庫訪問、通用設計模式、數據流、RTTI、持久化、多媒體(包括遊戲開發與 3D 圖形)、通用網絡協議 (HTTP, FTP)、正則表達式 等。

線程 | Threads


pthreads


由 POSIX 定義的線程實現規範 POSIX threads,C 語言的 API,在各類 Unix/Linux 和 Windows 下都有支持,是一套移植性很好的通用線程庫。
C++ Threads


活躍程度:2003-10 發佈版本 3.6 [2010-11 checked]
C++ 封裝的線程類,用於 Linux 開發的多線程支持。
ZThreads


活躍程度:2005-03 發佈版本 2.3.2 [2010-11 checked]
一個跨平臺,面向對象設計的線程和同步事務庫。在 POSIX 和 Windows 下通過測試。

科學與並行計算 | Scientific & Parallel Computation


這個一開始能夠分爲兩類:關於 數值計算 (Numeric Computation) 和 並行計算 的庫,可是有至關一部分庫同時涵蓋這兩種功能,而且現代的用於數學計算的程序愈來愈依靠並行處理來提高性能,因此就歸到了一類。
Blitz++


Blitz++ 是一個高效的數值計算函數庫,它的目的是創建一套具備 C++ 方便接口,同時又比 Fortran 速度更快的數值計算環境。一般,用 C++ 所寫出的數值程序,比 Fortran 慢 20% 左右,所以 Blitz++ 正是要改掉這個差距。方法是利用 C++ 的 template 技術,程序執行甚至能夠比 Fortran 更快。
CGAL


CGAL (Computational Geometry Algorithms Library) 是高效幾何計算方面的 C++ 類庫,CGAL 也有 Python 和 Matlab 的 API 接口。CGAL 應用的領域有:圖形學、可視化、輔助設計與建模、GIS 等。
POOMA


POOMA (Parallel Object-Oriented Methods and Applications) 原先是由 Los Alamos National Laboratory (LANL) 開發的用於並行計算的 C++ 類庫。
POOMA 提供近似於數學語法的高層語法,來簡化算法的編程,而且自動處理多處理器之間的通訊事務。POOMA 被用於物理模型的計算,例如:粒子物理計算。
FreePOOMA 是 POOMA 的繼續項目,原先的 POOMA 已經不多維護了。
MTL


MTL (Matrix Template Library) 提供 矩陣 和 線性代數 計算的功能,是一個基於模板泛型設計,以高性能計算 (HPC: High-performance computing) 爲目標的類庫。
MTL 有 2 個版本:MTL4 和 MTL2,MTL4 是 2005 後重寫的庫。
OpenMP


OpenMP 不是一套複用目的的開發庫,而是一組用於共享內存並行系統的多線程程序的一套指導規範,它由編譯和運行環境支持,最新的 GCC、ICC、VC 都對 OpenMP 有所支持。OpenMP 規範支持的語言包括 C、C++ 和 Fortran。開發時,在源碼中使用編譯指示 (directive, #pragma) 指導編譯器並行化,編譯器自動將程序並行化,並在必要之處加入同步互斥語義。
Intel Compilers and Libraries


原本不想把 Intel Compilers and Libraries 放到這一類的,由於這個軟件包含了除 開發庫 外的編譯和其它工具,可是因爲使用此軟件包可以在 Intel 平臺下開發和生成出色性能的程序,以及對並行計算的強力支持,仍是把它列出來了。這個軟件包以及從 ICC 編譯器增大到包括 VTune、Amplifier、Inspector、MKL (Math Kernel Library) 等各類性能工具和庫的開發套件,是開發 Intel 平臺高性能、併發程序的強力工具。

網絡功能 | Network Communication


不少通用庫和應用框架庫,如 Boost.Asio,都有網絡通訊功能、異步網絡 I/O 功能 (AIO) 或 Socket 封裝庫,這裏只列出以 網絡通訊功能 爲主要目的的開發庫。
ACE


  • ACE Home:從這裏開始瞭解 ACE,同時也是 ACE 之父 Schmidt 的主頁。

  • ACE Repository:Schmidt 是 Vanderbilt 大學的教授,ACE 的源碼能夠從 Vanderbilt 大學的 SVN 倉庫中下載。

  • ACE Docs:ACE 的 Doxygen 參考文檔。


ACE (Adaptive Communication Environment) 中文翻譯爲 自適應通信環境,由 Douglas Schmidt 發起,後來有其它人員參與。
ACE 是一套重量級的 C++ 網絡功能庫,它的特色是使用不少面向對象的設計模式來實現網絡功能,而且有很好的跨平臺能力。ACE 的框架中實現了不少概念,諸如:事件多路分離和事件處理器分派、信號處理、服務初始化、進程間通訊、共享內存管理、消息路由、分佈式服務動態配置、併發執行和同步 等。
由於 ACE 的模式衆多,因此使用者在清晰理解其概念的狀況下,纔會發揮 ACE 的效能。關於 ACE 的評價和學習步驟、資料,能夠參考《學之者生,用之者死:ACE 歷史與簡評》(陳碩)。
A Stream Socket API for C++http://www.pcs.cnu.edu/,Socket 封裝。
A simple IOCP Server/Client Classhttp://www.codeproject.com/,Windows Socket + IOCP 完成端口機制封裝。在 Windows 下稍加更改可讓這個變成符合本身須要的小巧而高效的網絡處理類。配文講解的中文翻譯在vckbase

XML 功能 | XML Functions


XML 是現代通用的數據保存格式,由於它的通用性和格式良好定義,被常常用在 數據存儲、數據交換 和 接口說明 等功能中。先列舉一些 XML 解析器 (XML Parser):
TinyXMLhttp://www.grinninglizard.com/tinyxml/,一個輕量級的 XML Parser.
MSXML


微軟的 XML Parser,全稱 Microsoft Core XML Services,採用 COM 的接口操做形式,提供 DOM 和 SAX2 API、XML Schema (XSD)、XPath、XSLT 功能。
xml4chttp://www.alphaworks.ibm.com/tech/xml4c,IBM 的重量級 XML Parser,C++ 實現,支持 100 多種字符編碼。
Xerceshttp://xml.apache.org/xerces-c,Apache 的 XML Parser,支持少數的字符編碼,如 ASCII、UTF-八、UTF-16 等,功能包括驗證 DTD、SAX 和 DOM API 等。
libxml++http://libxmlplusplus.sourceforge.net/,對的 libxml (The XML C parser and toolkit of Gnome) 解析器的 C++ 封裝。
XMLBoosterhttp://www.xmlbooster.com/,使用 DOM 和 SAX 兩大主流 XML 解析辦法以外的解析器。
下面列舉一些 XML 的功能庫:
Xalanhttp://xml.apache.org/xalan-c/,Xalan 能夠將 XML 文檔轉換爲 HTML、純文本或者其它 XML 類型文檔。
gSOAPhttp://gsoap2.sourceforge.net/,SOAP/Web Services 的一個 C++ 開源實現。
SOAP/Web Services in ATL Server


  • ATL Server Reference in MSDN (VS:微軟對 ATL Server 庫的支持下降了,在 MSDN Library 中,最後一個有 ATL Server 參考的版本是 VS8。由於如今微軟主推的 .Net 框架中已包含 HTTP 和 SOAP 等 Web 功能(WCF 等)。

  • ATL Server Library and Tools in CodePlex:ATL Server 如今在 CodePlex 上託管和維護,能夠在這裏獲得 ATL Server 最新的消息。


這是微軟的 SOAP/Web Services 功能。原先微軟有一個 SOAP Toolkit 的庫,實現 SOAP/Web Services 功能,但後來被廢棄了,並移入了 .Net 框架中。因此要使用本地代碼 C/C++ 實現的 SOAP,就要使用 ATL Server 庫中的 SOAP/Web Services 功能。ATL Server 庫除了 SOAP 以外還提供其它 Web 功能,例如 HTTP 實現。
eXisthttp://exist.sourceforge.net/,持續化 XML 存儲,XML 數據庫。
Simple XML Persistence Library (SXP)http://sxp.sourceforge.net/,將對象序列化爲 XML 的輕量級的 C++ 庫,用於持久存儲。

持久存儲 | Persistence & Storage


一般 持久存儲 表示的概念包括:(1) 將類型(POD 類型、類對象、容器)序列化爲二進制數據。(2) 提供基於文件/流的操做。(3) 提供基於數據庫的操做。對於 (3) 各數據庫管理軟件 (DBMS) 大多都提供本身的 C/C++ API,在 Windows 下更有 ODBC、OLE/DB 這種中間適配層提供統一的操做接口。下面只列出一些輕量級、開源的持久化功能。
s11nhttp://s11n.net/,一個基於 STL 的 C++ 庫,用於序列化 POD 類型、STL 容器以及用戶定義類型。
MySQL Connector/C++MySQL 5.1 Connector/C++ 參考,MySQL 數據庫客戶端操做的 C++ API。默認發佈的 MySQL 安裝包中包含其 C 語言的 API (MySQL Connector/C)。
SQLitehttp://www.sqlite.org/,輕量級的 SQL DBMS,沒有 SQL 的服務器端,單純基於文件存儲。提供 API 支持,使用戶執行 SQL 語句來查詢/操縱數據,Firefox 3 就使用 SQLite 保存其配置數據。

加解密 | Cryptographic


Crypto++
Crypto++ Sourceforge Projecthttp://www.cryptopp.com/。C++ 封裝的加解密算法庫。Crypto++ 是各類算法的合集,包括對稱密碼、非對稱密碼、摘要算法。
OpenSSLhttp://www.openssl.org/。C API 的加解密算法庫,以及 SSL 協議實現。OpenSSL 不僅是加解密算法庫,還包含網絡功能(包括未使用和使用加密通道 SSL)和實用工具。關於 OpenSSL 的資料參考個人OpenSSL 開發參考資料

日誌 | Logging


Log for C++ (Log4cpp)


Log4cpp 主要用於 C++ 程序中寫日誌,有着較強的跨平臺移植能力。除了日誌功能外,Log4cpp 中包括不少可移植的基礎功能,例如:同步功能 (Condition, CriticalSection, Event, Mutex, Semaphore)、網絡功能 (Socket, ServerSocket, DatagramSocket, SocketInputStream, SocketOutputStream)、文件監控 (FileWatchdog)、智能指針 (ObjectPtrT)、字符串處理 (StrictMath, StringHelper, StringTokenizer)、線程支持 等。
Boost.Loghttp://sourceforge.net/projects/boost-log/,用於日誌記錄的 Boost 庫,目前沒有放入 Boost 發佈包中。
log4cxxhttp://logging.apache.org/log4cxx/,Apache 出的日誌功能庫。
gloghttp://code.google.com/p/google-glog/
Log4cplushttp://log4cplus.sourceforge.net/
Logging In C++http://www.drdobbs.com/,這是 DrDobbs 上的一篇文章,教你怎麼寫出一個 C++ Logging 功能類。

函數式編程 | Functional Programming


Boost.Lambda
Boost.Lambda 是 Boost 提供的函數式編程特性。
The Functional C++ Library (FC++)http://www.cc.gatech.edu/,用模板庫來實現 C++ 的函數式編程。
FACT!http://www.fz-juelich.de/,另外一個實現 C++ 函數式編程的模板庫。

雜項 | MISC


CppUnit
CppUnit Sourceforge Project,一個 C++ 的單元測試框架,由 JUnit 移植而來,使用派生測試類的方式產生測試用例。

相關文章
相關標籤/搜索