七、图形图像处理 GDAL,处理大图像。 要是GIS专业的人肯定会语言到非常大的tif影像,动则几个GB的航空影像。GDAL对大图像的读写支持是非常棒的(像多波段的图像都可以搞定)。支持C++/Java/Python…… 2 A4 }! @( l; d% _2 y# N" C4 M* g
国外开源的GIS软件QGIS就是用了gdal 3 ~, R$ Z5 |7 C9 z+ Z& o8 J
c的图形图像库较多,libjpeg、libpng、zlib、tiff、JBIG、最著名的开源形图像处理软件Cximage
9 `' W6 Q e1 l# ^6 Z 八、内存管理:boost::smart_ptr,Hans-Boehm GC
1 R" J/ J5 d( E, j6 Q7 n' [ @" S& q C/C++的内存管理是一个永恒的话题。一般来说,C++的开发者倾向于自己管理内存。然而,出乎很多C++开发者意料的是,近期C++的一些领袖人物已经公开宣称,如果不配备自动内存管理机制,用C++编写安全可靠的大型程序是非常困难的。而Bjarne Stroustrup也曾对中国开发者建议,如果没有特别的理由,应该在大型项目中使用自动内存管理工具。因此,今天的C++开发者应当积极地学习和应用自动内存管理设施。 # N5 D' ]4 Z! }+ @8 H
说到自动内存管理,比较轻量级的做法是boost::smart_ptr,而激进的做法是引入完整的GC机制。目前开源而又比较可靠的GC中,Hans- Boehm GC无疑是最受信赖的。作为一个保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特别是,使用这个GC,你仍然可以delete、free来自己管理内存,对于我们编程习惯的冲击比较小。 ( X, e h8 N. y2 H
九、密码及安全:OpenSSL \1 \9 K, w( u6 A6 I* S% q( V1 i
安全是今天进行C/C++编程无法回避和必须重视的问题。然而编写安全的应用程序,特别是跟网络相关的C/C++应用程序,是一件十分困难的事情。可以说,整个业界目前在这个进程上仍然处于“初级阶段”。特别是涉及到大量的安全、密码学相关的算法、规范,如果让开发者自己摸索,其工作量和难度达到了不现实的程度。因此必须借助可靠的相关程序库才有可能提高程序的安全性。在这方面,OpenSSL是目前最好的选择,其内容之全面可靠,已经成为业界标杆。然而,由于安全编程固有的复杂性,即使使用penSSL,开发工作仍然是非常繁琐的。因此我们也希望能够尽快看到更简单、更易用的C/C++安全程序库。 & L0 }1 v: D3 @
十、矩阵计算:MTL 2 g) K( P: e, m- }! H
自1995年以来,C++在科学计算领域当中取得了巨大的突破。这主要归功于template技术的高级应用,使得C++在科学计算的性能方面取得了巨大的进步,一大批优秀的C++科学计算库涌现出来。比如Blitz++、POOMA、MTL、Boost::uBLAS.而这其中,MTL就功能丰富程度、性能、开发支持和成熟程度来讲,是比较突出的一个,因此可以优先考虑。值得一提的是,2002年,MTL与后来被Intel收购的KAI C++配合,曾经在性能评测中击败了FORTRAN.
8 |8 W; v! u9 M# i S2 K6 P: m 十一、中间件 4 _$ ^( k9 [# e# _
1、分布式对象中间件:ICE
3 f, A( y9 ^ s! K ICE是分布式对象中间件领域里的后起之秀,可以大致地将其视为“改进版”的CORBA.目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军作战系统。 7 v! \+ K) ?6 U9 a% |
ICE的一个特别价值是其代码的范例意义。由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。 + [7 N, _2 y7 q6 [
2、消息中间件:ZeroMQ,总结的几种特性如下:
7 {7 H; {; Y( H% h5 L 1) 消息系统中,它差不多是最简洁的,只是个简洁的API,有n多种语言的绑定,没有专门的服务器;
, g- b/ `$ J0 B+ V& m 2) 性能非常优越,远远高于RabbitMQ、ActiveMQ、MSMQ等; ' [/ F9 n5 }4 M1 B) r; ^) ?
3) 适合做分布式和并发应用。
7 T0 t' x, }0 F4 @ 十二、正则表达式:boost::regex 8 l. ^! h1 v( i- k
正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex库,初步解决了这个问题。但是最初的regex无论在效率上还是可靠性方面都有一些问题,后来经过一次大规模的翻修之后,达到了比较完善的程度。
! {9 b! a0 W9 ~3 ~8 L" K, d% v; z5 w! }
其他可以选择的替代品还有C语言的pcre库,Qt中的QRegExp类等。 |