序(Foreword)
C++社区正在发生着一些美妙的事情。尽管C++仍然是世界上使用最广泛的编程语言,它依旧在变得更加强大而且易用。不信么?容我慢慢道来。
当前版本的标准C++是在1998年最终确定下来的,它为传统的过程式编程(procedural programming)以及面向对象和泛型编程(generic programming)提供了强有力的支持。正如老的(1998年以前的)C++单枪匹马地把面向对象引入软件开发者日常工作可及的范围那样,C++98针对泛型编程做了同样的事情。1990年代中期标准模板库(STL)被整合到标准C++代表了一种编程范式(paradigm)的转移,它的意义不亚于Bjarne Stroustrup在1980年代早期把类引入C语言。现在,大多数C++从业人员对于STL的概念已经非常熟悉,是时候再一次提升我们的技术水准了。
如何发挥C++的威力仍然在不断地被发掘。现今的许多C++库(尤其是一些数学计算库)都受益于模板元编程(template metaprogramming)原本所具有的优势,这是一个偶然的并且未被预见到的结果,它得益于C++模板的杰出设计。随着高阶的工具和技术在C++社区不断出现,开发日益复杂的应用程序正在变得更加直接了当和令人愉悦。
如何强调Boost库对于C++世界的重要性都不为过。从C++98的标准通过以来,除了ISO的标准C++委员会(叫做WG21),没有其他的组织像Boost这样对C++的发展方向产生了如此巨大的影响,Boost的许多出资者都是WG21的著名成员,包括它的创建者,我的朋友Beman Dawes。成千上万经验丰富的Boost志愿者以没有任何私心的、专家评审(peer-reviewed)的方式,开发了许多有用的库,这些库提供了C++98所未能提供的解决方案。其中的10个库已经被认可并打算集成到就要到来的C++0x库,而且还有更多的库处于考虑之中。当确实欠缺某个被提议的库的时候,Boost和WG21之间的相互交流和影响(cross-pollination)所迸发出来的智慧暗示了需要一些谨慎的语言上的改进,这些东西正在考虑之中。
退一万步说,假设你从没听说过Boost,那我问问你。。。。。。你需要在文本和数字之间做转换么?或者(好一点的情况)在以流的方式进行输入输出的(streamable)类型之间进行转换。没问题,使用Boost.lexical_cast就好了。哦,你需要进行更复杂的文本处理?或许可以试试Boost.Tokenizer或者Boost.Regex,如果你需要做更加全面的解析,可以试试Boost.Spirit。Boost.Bind对于函数进行投影和组合的能力可能会让你瞠目结舌。对于函数式编程(functional programming)可以使用Boost.Lambda。静态断言(Static assertions)?当然没问题。如果你对数学有偏好,扔掉铅笔吧,你可以使用Boost.Math, Graph, Quaternion, Octonion, MultiArray, Random, 以及Rational。如果你有幸体会到了使用Python的乐趣,你可以在Boost.Python的帮助下把它和C++一起使用。对于上面提到的这些库,你可以根据实际需要选择开发平台。
Björn Karlsson是一个*的Boost拥护者,也是C++社区忠心耿耿的支持者。他在C/C++ Users Journal上发表了许多有用而且好读的文章,最近,他也为The C++ Source写了一些文章,The C++ Source是一个传递C++社区声音的新的在线资源(请访问www.artima.com/cppsource)。在本书中,他提倡并且描述了Boost的一些关键组件,然后展示了它们是如何与C++标准库一道工作并且扩展C++标准库的。不要仅仅把本书看成是一本深入Boost的教程,还可以拿它来品尝一下将来版本的标准C++。爽一下吧!