标签:nal 更新 智能指针 审查 style 经理 社区 ast 也会
你正在寻找一个高质量的,开源的,与平台和编译器无关的程序库的集合?看一下Boost吧。想加入一个由雄心勃勃的,充满天赋的正致力于最高水平的程序库设计和实现工作的C++程序员们组成的团体么?看一下Boost吧。想了解C++将来可能会是什么样子的?看一下Boost吧。
Boost是一个C++开发人员组成的团体,也是供免费下载的C++程序库的集合。网址是http://boost.org。
当然,有许多C++组织和网站,但是Boost有两点是其它组织不能与之媲美的。首先,它和C++标注委员会有着紧密的关系,并且对C++标准委员会有影响力。Boost是由C++标准委员会成员创立的,所以Boost和委员会成员之间有很大的重叠。此外,Boost的其中一个目标是为能够加入标准C++的功能提供一个实验场地。这种关系的一个结果就是由TR1引入到C++中的14个新的程序库中,有多于2/3的程序库是基于Boost的工作成果。
Boost的第二个特殊的特征就是接受程序库的过程。它是在同行评审的基础之上进行的。如果你想向Boost贡献一个程序库,你先向Boost开发人员发送邮件,让他们评估程序库的重要性,然后开始对你工作进行初步的审查。这就开始了一个循环流程,网站将其总结为“讨论,精炼,重发。重复这个流程直到委员会满意为止。”
最后,你决定你的程序库已经准备好正常的提交了。审查经理确认你的程序库满足了Boost的最低需求。例如,必须在至少两个编译器上编译通过(为了确保可移植性),你也必须确保这个程序库在可接受的license下能够被使用(例如,程序库必须允许在商业和非商业的使用中是免费的。)然后Boost委员会就能获得你提交的程序库了,他们会进行官方的审查。在审查期间,志愿者会仔细检查你的程序库材料(例如,源码,设计文档,使用说明文档等等),并且会考虑如下问题:
这些注释会发送到Boost邮件列表中,所以审查人员和其他人能够看到,并可以对其它人的评论做出反馈。在审查的最后,审查经理决定你的程序库是否被接受,有条件的接受或者被拒绝。
同行评审可以将实现的不好的程序库排除在外,也同样能够帮助程序库的作者,教他们如何对工业强度的,跨平台的程序库进行设计,实现和撰写文档。许多程序库在被声明其有价值并被接受之前,需要不止一次的官方评审。
Boost包含了大量的程序库,更多的是在大家贡献的基础上进行添加的。一些程序库也会时不时的被移除掉,因为这些功能被更新的程序库取代了,它们提供了更棒的功能或者更好的设计(例如,更加灵活或者更加高效。)
Boost程序库在大小和范围上有很大不同。一个极端是程序库只在概念上需要几行代码(但是如果支持错误处理和增加可移植性会需要更长的代码。)有一个这样的程序库叫做Conversion,它提供了更加安全或者说更加方便的cast操作。例如,它的numeric_cast函数,如果从一个数值类型转换到另外一个数值类型的时候导致内存溢出或者类似的问题,异常就会抛出;lexical_cast使得把支持operator<<的任何类型转换成string成为可能,这对诊断和记录日志是非常有帮助的。另外一个极端是程序库提供了非常广泛的功能,整本书都用来介绍它们。这样的程序库包含Boost Graph Library(支持使用任意的图表结构来进行编程),还有Boost MPL Library(“元编程库”)。
Boost程序库处理了一系列的主题,它们被分成一些种类。这些种类包括:
1 using namespace boost::lambda; // make boost::lambda 2 // functionality visible 3 4 std::vector<int> v; 5 ... 6 std::for_each(v.begin(), v.end(), // for each element x in 7 8 9 std::cout << _1 * 2 + 10 << "\n"); // v, print x*2+10; 10 // “_1” is the Lambda 11 // library’s placeholder 12 // for the current element
1 // create a list-like compile-time container of three types (float, 2 // double, and long double) and call the container “floats” 3 typedef boost::mpl::list<float, double, long double> floats; 4 // create a new compile-time list of types consisting of the types in 5 // “floats” plus “int” inserted at the front; call the new container “types” 6 typedef boost::mpl::push_front<floats, int>::type types;
这种类型的容器(被人熟知的是typelist,虽然它们也可以基于一个mpl::vector或者mpl::list)为一系列强大和重要的TMP应用打开了大门。
记住,这只是Boost中的一部分程序库。并没有把所有的都列出来。
Boost提供的库可以做很多事情,但是不能做所有事情。例如,没有为GUI开发提供的库,也没有同数据库进行通信的库。至少现在没有。但是当你读到这本书的时候可能就有了。了解它们的唯一方式就是核实。我建议你现在就做:http://boost.org。即使你没有发现你想要的,你肯定能够发现一些有趣的东西。
读书笔记 effective c++ Item 55 让你自己熟悉Boost
标签:nal 更新 智能指针 审查 style 经理 社区 ast 也会
原文地址:http://www.cnblogs.com/harlanc/p/6760055.html