如何说服你的公司、组织使用Boost库

one of the most highly regarded and expertly designed C++ library projects in the world.

如何开始使用Boost库

Boost是一个库的集合,有一些库不需要考虑就可以开始使用。这就是boost/core/xxx.hpp。

  1. 可以不使用&,而是使用boost::addressof(变量)来取得变量的地址。它更可读,更安全,特别是当T类型重载了operator &时,它也可以正常工作。

  2. 使用checked_delete,而不是直接delete。它也是更可读,更安全,特别是它可以规避前置声明引起的一些问题。

  3. 如果有模板偏特化,可以看一看是否可以使用enable_if这个模板来优化。同时,is_same这个特性模板会是判断类型相同的更有效工具。

  4. 考虑使用explicit_operator_bool代替:operator bool的重载,因为大多数程序员不能写出无错的operator bool。

  5. 使用语义明确的boost::ignore_unused,代替无意义的自求值语句。

  6. 当定义模板函数或类型,你需要一个引用,但编译不过时,考虑换成boost::reference_wrapper,而不是直接换成指针。因为

    boost提供了一组操作这种类型的函数,包括生成ref/cref,解引用unwrap_ref等。比用裸指针要安全,比使用智能指针要轻量。

7.如果你的编译器已经支持enum class,那可以不用看这条,但如果不支持,考虑使用boost::scoped_enum,能生成非全局的枚举。

关键是,它不支持从int直接转型。

8.使用std::swap的升级版本boost::swap,除了它支持自定义类型外,还支持数组。有了它,写移动构造函数就会更简单了。

  1. 最后推荐个人使用boost lightweight test。使用它,忘记test suite什么吧。简单写一个main就可以了。如下,
#include <boost/core/lightweight_test.hpp>

namespace b = boost;

int main() {
BOOST_TEST(true);
BOOST_TEST_NE("hello", "hello");
return b::report_errors();
}

子函数中也可以使用BOOST_TEST,关键是要在main中主动调用一下子函数。

同时,如果用例失败,是会报在哪个函数中的错误,例如:

test 'false' failed in function 'void subtest()'

使用Boost库(1)的更多相关文章

  1. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

  2. vs2013给项目统一配置boost库

    1.打开项目,然后点击菜单中的 视图->其他窗口->属性管理器 2. 打开属性管理器,点击项目前的箭头,展开项目,找到debug或者release下面的Microsoft.Cpp.Win3 ...

  3. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

  4. dev c++ Boost库的安装

    dev c++ 的boost库的安装步骤 然后点击“check for updates”按钮 最后点击“Download selected”按钮,下载完成后安装.... 给dev添加boost库文件, ...

  5. vs配置boost库

    步骤: 1.在boost官网下载boost版本,以1.59.0为例. 2.解压,解压后可看到文件夹下有个bootstrap.bat文件. 注意: 如果有以下error: 'cl' 不是内部或外部命令, ...

  6. windows下安装boost库

    工作中现在会接触boost,所以我计划两个月之内努力熟悉一下boost.今天在自己win10系统上尝试安装了boost库,下面把遇到的问题总结一下: 1. 下好1.61版本库,在boost目录下运行b ...

  7. ubuntu 下安装boost库

    ubuntu下安装boost库,,在网上试了一些其他人推荐的libboost-dev 但是会缺少,编译程序会报错: /usr/bin/ld: cannot find -lboost_serializa ...

  8. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

  9. C++ | boost库 类的序列化

    是的,这是今年的情人节,一篇还在研究怎么用的文章,文结的时候应该就用成功了. 恩,要有信心 神奇的分割线 不知何时装过boost库的header-only库, 所以ratslam中的boost是可以编 ...

  10. boost库(条件变量)

    1相关理念 (1)类名 条件变量和互斥变量都是boost库中被封装的类. (2)条件变量 条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线 ...

随机推荐

  1. DELPHI中使用UNIDAC连接ORACLE数据库

    DELPHI中使用UNIDAC连接ORACLE数据库   最近在DELPHI中使用到UNIDAC连接到oracle数据库,这样可以不要安装oracle客户端,比较方便使用:所以简单学习了一下,主要是用 ...

  2. GitFlow在客户端Sourcetree的使用

    安装 Sourcetree中直接集成了gitflow工具,可以在界面上找到  初始化 首次按下Git Flow按钮后,会弹出如图窗口  初始化会规定几个特殊的分支名称 生产环境分支:master 开发 ...

  3. HDU 1878 欧拉回路(无向图的欧拉回路)

    欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. 1122 Hamiltonian Cycle

    题意:包含图中所有结点的简单环称为汉密尔顿环.给出无向图,然后给出k个查询,问每个查询是否是汉密尔顿环. 思路:根据题目可知,我们需要判断一下几个条件:(1).首先保证给定的环相邻两结点是连通的:(2 ...

  5. PHPCMS分页原理

    调用很方便,使用listinfo方法,如果小于1页不会返回分页字符串 $page = $_GET['page'] ? intval($_GET['page']) : '1'; $products = ...

  6. git学习2 - 安装

    msysgit是Windows版的Git,从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可. 安装完成后,在开始菜单里找到 ...

  7. 最长上升子序列(LIS)

    最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS.排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个序列d[1..9] = ...

  8. uboot重定位代码分析(转)

    概述 重定位(relocate)代码将BootLoader自身由Flash复制到SDRAM,以便跳转到SDRAM执行.之所以需要进行重定位是因为在Flash中执行速度比较慢,而系统复位后总是从0x00 ...

  9. Idea搭建Scala开发环境的注意事项

    Idea搭建Scala开发环境的注意事项 1.下载ideaIC-2017.3.tar.gz 2.解压安装idea 3.File->setting->plugins 下载2个插件scala. ...

  10. CSS秘密花园:多边框

    今天在查询CSS3动画相关资料时偶然发现这个,感觉有时还是挺方便的.原文链接:http://www.w3cplus.com/css3/css-secrets/multiple-borders.html ...