zoukankan      html  css  js  c++  java
  • 使用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()'
    
  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/ahuangliang/p/7140943.html
Copyright © 2011-2022 走看看