使用Boost库(1)

如何说服你的公司、组织使用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()'
原文地址:https://www.cnblogs.com/ahuangliang/p/7140943.html