boost :: shared_ptr和std :: shared_ptr共存

Yan*_*Zhu 7 c++ boost shared-ptr c++11

我们都知道boost和c ++ 11都支持shared_ptr.有些编译器支持c ++ 11,而有些编译器则不支持.我想编写我的代码,以便当编译器支持c ++ 11 shared_ptr时,它使用std :: shared_ptr; 如果没有,请使用boost :: shared_ptr.最常见/最佳做法是什么?

让我将讨论局限于GCC,而不是特定版本.

Com*_*sMS 3

您只需将它们拉入自定义名称空间即可

#ifdef HAS_STD_SHARED_PTR
    #include <memory>
    #define SHARED_PTR_NAMESPACE std
#else
    #include <boost/shared_ptr.hpp>
    #define SHARED_PTR_NAMESPACE boost
#endif

namespace my_namespace {
     using SHARED_PTR_NAMESPACE::shared_ptr;
     using SHARED_PTR_NAMESPACE::make_shared;
}

#undef SHARED_PTR_NAMESPACE
Run Code Online (Sandbox Code Playgroud)

HAS_STD_SHARED_PTR标志需要由构建环境设置。CMake 提供了多种机制检测此类功能,较新的 C++ 实现还提供功能测试宏,以便快速轻松地检测新功能。

  • 你可以(并且IMO应该)使用命名空间别名而不是那些定义:`namespace shared_ptr_ns = boost;` (3认同)