读书笔记 effective c++ Item 55 让你自己熟悉Boost

小编 2026-06-24 阅读:1127 评论:0
你正在寻找一个高质量的,开源的,与平台和编译器无关的程序库的集合?看一下Boost吧。想加入一个...

你正在寻找一个高质量的,开源的,与平台和编译器无关的程序库的集合?看一下Boost吧。想加入一个由雄心勃勃的,充满天赋的正致力于最高水平的程序库设计和实现工作的C++程序员们组成的团体么?看一下Boost吧。想了解C++将来可能会是什么样子的?看一下Boost吧。

Boost是一个C++开发人员组成的团体,也是供免费下载的C++程序库的集合。网址是http://boost.org

1. Boost的两大优势

当然,有许多C++组织和网站,但是Boost有两点是其它组织不能与之媲美的。首先,它和C++标注委员会有着紧密的关系,并且对C++标准委员会有影响力。Boost是由C++标准委员会成员创立的,所以Boost和委员会成员之间有很大的重叠。此外,Boost的其中一个目标是为能够加入标准C++的功能提供一个实验场地。这种关系的一个结果就是由TR1引入到C++中的14个新的程序库中,有多于2/3的程序库是基于Boost的工作成果。

2. Boost库的收录流程

Boost的第二个特殊的特征就是接受程序库的过程。它是在同行评审的基础之上进行的。如果你想向Boost贡献一个程序库,你先向Boost开发人员发送邮件,让他们评估程序库的重要性,然后开始对你工作进行初步的审查。这就开始了一个循环流程,网站将其总结为“讨论,精炼,重发。重复这个流程直到委员会满意为止。”

最后,你决定你的程序库已经准备好正常的提交了。审查经理确认你的程序库满足了Boost的最低需求。例如,必须在至少两个编译器上编译通过(为了确保可移植性),你也必须确保这个程序库在可接受的license下能够被使用(例如,程序库必须允许在商业和非商业的使用中是免费的。)然后Boost委员会就能获得你提交的程序库了,他们会进行官方的审查。在审查期间,志愿者会仔细检查你的程序库材料(例如,源码,设计文档,使用说明文档等等),并且会考虑如下问题:

  • 设计和实现有多好?
  • 在不同编译器和操作系统上是可移植的么?
  • 程序库对于受众群体——也就是使用这个程序库处理问题的人们——是否有用?
  • 文档是否清晰,完整,精确?

这些注释会发送到Boost邮件列表中,所以审查人员和其他人能够看到,并可以对其它人的评论做出反馈。在审查的最后,审查经理决定你的程序库是否被接受,有条件的接受或者被拒绝。

同行评审可以将实现的不好的程序库排除在外,也同样能够帮助程序库的作者,教他们如何对工业强度的,跨平台的程序库进行设计,实现和撰写文档。许多程序库在被声明其有价值并被接受之前,需要不止一次的官方评审。

Boost包含了大量的程序库,更多的是在大家贡献的基础上进行添加的。一些程序库也会时不时的被移除掉,因为这些功能被更新的程序库取代了,它们提供了更棒的功能或者更好的设计(例如,更加灵活或者更加高效。)

3. Boost库有大有小

Boost程序库在大小和范围上有很大不同。一个极端是程序库只在概念上需要几行代码(但是如果支持错误处理和增加可移植性会需要更长的代码。)有一个这样的程序库叫做Conversion,它提供了更加安全或者说更加方便的cast操作。例如,它的numeric_cast函数,如果从一个数值类型转换到另外一个数值类型的时候导致内存溢出或者类似的问题,异常就会抛出;lexical_cast使得把支持operator<<的任何类型转换成string成为可能,这对诊断和记录日志是非常有帮助的。另外一个极端是程序库提供了非常广泛的功能,整本书都用来介绍它们。这样的程序库包含Boost Graph Library(支持使用任意的图表结构来进行编程),还有Boost MPL Library(“元编程库”)。

4. Boost库的分类

Boost程序库处理了一系列的主题,它们被分成一些种类。这些种类包括:

  • 字符串和文本处理,包括类型安全的能够像printf一样进行格式化,正则表达式(这是在TR1中提供的类似的功能的基础)tokenizing和解析。
  • 容器,包括固定大小的数组,它有一个类似STL的接口(见Item 54),容量可变的bitset和多维数组。
  • 函数对象和高级编程,包括被当作TR1中功能基础的一些程序库。一个有趣的程序库是Lambda程序库,使得创建函数对象非常简单,你甚至不太可能意识到你在做什么:

     

 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 << "
"); // v, print x*2+10;10 // “_1” is the Lambda11 // library’s placeholder12 // for the current element

 

  • 泛型编程,包含了大量的traits class。(见 Item47
  • 模板元编程(见Item 48),包括为编译时断言提供的程序库,还有Boost MPL 程序库。MPL支持编译时实体的像STL一样的数据结构,例如types:

     

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 in5 // “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应用打开了大门。

  • 数学和数字,包括为有理数提供的库;八元数和四元数;最大公约数和最小公倍数的计算;还有随机数(虽然这是另外一个影响TR1中的相关功能的库。)
  • 正确性和测试,包括为形式化隐式模板接口提供的程序库(Item 41)和使测试先行更加容易的程序库。
  • 数据结构,包括为类型安全的union提供的程序库,还有实现了TR1中相对应功能的tuple库。
  • 内存,包括为高性能的固定大小的内存分配器提供的Pool库(见Item50);一些列的智能指针(Item13),包括但不限于TR1中的智能指针。一个这样的非TR1智能指针为scoped_array,一个像auto_ptr一样的为动态分配数组提供的智能指针;Item44提供了一个实例。
  • 杂项,包括为CRC校验提供的库,日期和时间操作的库,在文件系统上移动的库。

记住,这只是Boost中的一部分程序库。并没有把所有的都列出来。

Boost提供的库可以做很多事情,但是不能做所有事情。例如,没有为GUI开发提供的库,也没有同数据库进行通信的库。至少现在没有。但是当你读到这本书的时候可能就有了。了解它们的唯一方式就是核实。我建议你现在就做:http://boost.org。即使你没有发现你想要的,你肯定能够发现一些有趣的东西。

5. 总结

  • Boost是一个社区和网站,它为开发人员提供了免费的,开源的,经过同行评审的C++程序库。Boost对C++标准有影响力。
  • Boost提供了许多TR1组件的实现,但也提供了许多其它的程序库。


作者:HarlanC

博客地址:http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表