1、 在 C+中,库的地位是非常高的。C+之父 Bjarne Stroustrup 先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C+的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比较著名的大型库。【GUI】在众多 C+的库中,GUI 部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI 库的选择也是非常重要的一件事情,下面我们综述一下可选择的 GUI 库,各自的特点以及相关工具的支持。1、MFC大名鼎鼎的微软基础类库(Mi
2、crosoft Foundation Class)。大凡学过 VC+的人都应该知道这个库。虽然从技术角度讲,MFC 是不大漂亮的,但是它构建于 Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 C+ 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的 Windows 操作系统上是可移植的,例如,在 Windows 3.1 下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。2、QT参考网站:http:/Qt 是 Trol
3、ltech 公司的一个多平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt 是完全面向对象的很容易扩展,并且允许真正地组件编程。自从 1996 年早些时候,Qt 进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt 也是流行的 Linux 桌面环境 KDE 的基础,同时它还支持 Windows、Macintosh、Unix/X11 等多种平台。3、WxWindows参考网站:http:/www.wxwindows.org跨平台的 GUI 库。因为其类层次极像 MFC,所以有文章介绍从 MFC 到 WxWindows的代码移植
4、以实现跨平台的功能。通过多年的开发也是一个日趋完善的 GUI 库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近的 C+ Builder X 的 GUI 设计器就是基于这个库的。4、Fox参考网站:http:/www.fox-toolkit.org/开放源代码的 GUI 库。作者从自己亲身的开发经验中得出了一个理想的 GUI 库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。5、WTL基于 ATL 的一个库。因为使用了大量 ATL 的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发 COM 轻量级供网络下载的可视化控件
5、的开发者。6、GTK参考网站:http:/ 是一个大名鼎鼎的 C 的开源 GUI 库。在 Linux 世界中有 Gnome 这样的杀手应用。而 Qt就是这个库的 C+封装版本。【网络通信】、ACE参考网站:http:/www.cs.wustl.edu/schmidt/ACE.htmlC+库的代表,超重量级的网络通信开发框架。ACE 自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE 提供了一组丰富的可复用 C+ 包装外观(Wrapper Facade)和框架组件,可跨
6、越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。、StreamModule参考网站:http:/www.omnifarious.org/StrMod设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。、SimpleSocket参考网站:http:/home.hetnet.nl/lcbokkers/simsock.htm这个类库让编写基于 socket 的客户/ 服务器程序更加容易。、A Stream Socke
7、t API for C+参考网站:http:/u.edu/dgame/sockets/socketsC+/sockets.html又一个对 Socket 的封装库。【XML】、Xerces参考网站:http:/xml.apache.org/xerces-c/Xerces-C+ 是一个非常健壮的 XML 解析器,它提供了验证,以及 SAX 和 DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在 2001年 12 月增加了支持 W3C XMLSchema 的基本完整的开放标准。、XMLBooster参考网站:http:/ p
8、arser 的办法极大的提高了 XML 解析的速度,并且能够产生相应的 GUI 程序来修改这个 parser。在 DOM 和 SAX 两大主流 XML 解析办法之外提供了另外一个可行的解决方案。、Pull Parser参考网站:http:/www.extreme.indiana.edu/xgws/xsoap/xpp这个库采用 pull 方法的 parser。在每个 SAX 的 parser 底层都有一个 pull 的 parser,这个 xpp 把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。、Xalan参考网站:http:/xml.apache.org/xalan-c/Xala
9、n 是一个用于把 XML 文档转换为 HTML,纯文本或者其他 XML 类型文档的XSLT 处理器。、CMarkup参考网站:http:/ EDOM 的 XML 解析器。在很多思路上面非常灵活实用。值得大家在DOM 和 SAX 之外寻求一点灵感。、libxml+http:/ libxml XML 解【科学计算】、Blitz+参考网站:http:/www.oonumerics.org/blitzBlitz+ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像 C+一样方便,同时又比 Fortran 速度更快的数值计算环境。通常,用 C+所写出的数值程序,比 Fortran 慢 20%
10、左右,因此 Blitz+正是要改掉这个缺点。方法是利用 C+的 template技术,程序执行甚至可以比 Fortran 更快。Blitz+目前仍在发展中,对于常见的 SVD,FFTs ,QMRES 等常见的线性代数方法并不提供,不过使用者可以很容易地利用 Blitz+所提供的函数来构建。、POOMA参考网站:http:/ 是一个免费的高性能的 C+库,用于处理并行式科学计算。POOMA 的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。、MTL参考网站:http:/www.osl.iu.edu/research/mtlMatrix Temp
11、late Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如 Intel 的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。、CGAL参考网站:www.cgal.orgComputational Geometry Algorithms Library 的目的是把在计算几何方面的大部分重要的解决方案和方法以 C+库的形式提供给工业和学术界的用户。【游戏开发】、Audio/Video 3D C+ Programming Library参考网站:http:/ 是一个跨平台,高性能的 C+库。主要的特性是提
12、供 3D 图形,声效支持(SB,以及 S3M),控制接口(键盘,鼠标和遥感),XMS。、KlayGE参考网站:http:/ C+开发的游戏引擎。KlayGE 是一个开放源代码、跨平台的游戏引擎,并使用 Python 作脚本语言。KlayGE 在 LGPL 协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。、OGRE参考网站:http:/www.ogre3d.orgOGRE(面向对象的图形渲染引擎)是用 C+开发的,使用灵活的面向对象 3D 引擎。它的目的是让开发者能更方便和直接地开发基于 3D 硬件设备的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D 和 OpenG
13、L)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其它类。【线程】、C+ Threads参考网站:http:/ Linux 环境中很难看到的大量的线程方面的功能。、ZThreads参考网站:http:/ C+线程和同步库。序列化、s11n参考网站:http:/ STL 的 C+库,用于序列化 POD,STL 容器以及用户定义的类型。、Simple XML Persistence Library参考网站:http:/ XML 的轻量级的 C+库。【字符串】、C+ Str Library参考网站:http:/ Windows 和支持 gcc 的多种平台。提供高度优化的代码,并且支持多线
14、程环境和 Unicode,同时还有正则表达式的支持。、Common Text Transformation Library参考网站:http:/ STL 字符串的库。CTTL substring 类可以用来比较,插入,替换以及用 EBNF 的语法进行解析。、GRETA参考网站:http:/ C+应用程序框架。当前关注类型和线程安全的 signal/slot 机制,i/o 系统包括基于插件的网络协议透明的 i/o 架构,基于插件的应用程序消息日志框架,访问 sql 数据库的类等等。、ACDK - Artefaktur Component Development Kit参考网站:http:/ C+
15、组件框架,类似于 Java 或者.NET 中的框架(反射机制,线程,Unicode,废料收集,I/O,网络,实用工具,XML,等等),以及对 Java, Perl, Python, TCL, Lisp, COM 和 CORBA 的集成。、dlib C+ library参考网站:http:/www.cis.ohio-state.edu/kingd/dlib/各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目录的 API 等等。、Chilkat C+ Libraries参考网站:http:/ zip,e-mail,编码,S/MIME,XML 等方面的库。、C+ Port
16、able Types Library (PTypes)参考网站:http:/ STL 的比较简单的替代品,以及可移植的多线程和网络库。、LFC参考网站:http:/ C+库。其他库、Loki参考网站:http:/ Boost 一起介绍它,一个实验性质的库。作者在 loki 中把 C+模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。、ATLATL(Active Template Library)是一组小巧、高效、灵活的类,这些类为创建可互操作的 COM 组件提供了基本的设施。、FC+: The Functional C+ Li
17、brary这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在 OOP 之外寻找另一分的乐趣,可以去看看函数式程序设计的世界。大师 Peter Norvig 在 “Teach Yourself Programming in Ten Years”一文中就将函数式语言列为至少应当学习的 6 类编程语言之一。、FACT!参考网站:http:/www.kfa-juelich.de/zam/FACT/start/index.html另外一个实现函数式语言特性的库、Crypto+提供处理密码,消息验证,单向 hash,公匙加密系统等功能的免费库。还有很多非常激动人心或者是极其实用的 C+库,限于我们的水平以及文章的篇幅不能包括进来。在对于这些已经包含近来的库的介绍中,由于并不是每一个我们都使用过,所以难免有偏颇之处,请读者见谅。