gpt4 book ai didi

c++ - 使用 boost::shared_ptr 以期稍后替换它

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:17 24 4
gpt4 key购买 nike

我正在研究需要共享指针的跨平台代码。由于我无法控制的原因,我们现在还不能使用 C++11。所以,我建议使用 boost::shared_ptr。当我们采用 C++11 时(可能一年后),我们应该能够用 std 智能指针替换 boost 智能指针。我的问题是关于使用 boost 的最佳方式,以便以后更容易切换。模板别名不可用,因此以下内容不可用:

namespace my {
template <typename T>
using shared_ptr = boost::shared_ptr<T>;
}

将 shared_ptr 包装在另一个结构中的另一种技术会导致丑陋且不可读的 API,因此我将不得不使用它 my::shared_ptr<int>::type :

 namespace my  {
template<typename T>
struct shared_ptr
{
typedef boost::shared_ptr<T> type;
};
}

我正在寻找替代方案。任何建议将不胜感激。

编辑:我考虑的另一个选择是:

namespace my {
using boost::shared_ptr;
}

然后使用my::shared_ptr<int> .稍后我会更改booststdnamespace my .但是,我无法根据每种方法的优缺点来做出决定。

最佳答案

兼容C++98的四个选项,

1) 使用 impl::shared_pointer<T> .并切换自:

namespace impl = boost;namespace impl = std;

2)(更优雅但风险更大)是使用shared_ptr没有 namespace 限定,稍后从

using boost::shared_ptrusing std::shared_ptr .

3)(丑陋但我猜想是首选的工业解决方案)一直使用宏。

#if DETECTC++11
#define SHARED_PTR std::shared_ptr
#else
#define SHARED_PTR boost::shared_ptr
#endif

4) 结合以上 3 项。

匿名命名空间有助于保留 using文件本地的语句,因此您可以控制每个源文件,例如:

namespace{
using std::shared_ptr;
}

(我个人一直使用 2.)。

关于c++ - 使用 boost::shared_ptr 以期稍后替换它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22928795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com