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,而不是特定版本.
您只需将它们拉入自定义名称空间即可
#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++ 实现还提供功能测试宏,以便快速轻松地检测新功能。