如何说服你的公司、组织使用Boost库
one of the most highly regarded and expertly designed C++ library projects in the world.
如何开始使用Boost库
Boost是一个库的集合,有一些库不需要考虑就可以开始使用。这就是boost/core/xxx.hpp。
-
可以不使用&,而是使用boost::addressof(变量)来取得变量的地址。它更可读,更安全,特别是当T类型重载了operator &时,它也可以正常工作。
-
使用checked_delete,而不是直接delete。它也是更可读,更安全,特别是它可以规避前置声明引起的一些问题。
-
如果有模板偏特化,可以看一看是否可以使用enable_if这个模板来优化。同时,is_same这个特性模板会是判断类型相同的更有效工具。
-
考虑使用explicit_operator_bool代替:operator bool的重载,因为大多数程序员不能写出无错的operator bool。
-
使用语义明确的boost::ignore_unused,代替无意义的自求值语句。
-
当定义模板函数或类型,你需要一个引用,但编译不过时,考虑换成boost::reference_wrapper
,而不是直接换成指针。因为
boost提供了一组操作这种类型的函数,包括生成ref/cref,解引用unwrap_ref等。比用裸指针要安全,比使用智能指针要轻量。
7.如果你的编译器已经支持enum class,那可以不用看这条,但如果不支持,考虑使用boost::scoped_enum,能生成非全局的枚举。
关键是,它不支持从int直接转型。
8.使用std::swap的升级版本boost::swap,除了它支持自定义类型外,还支持数组。有了它,写移动构造函数就会更简单了。
- 最后推荐个人使用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()'