【发布时间】:2014-04-08 06:05:27
【问题描述】:
我正在处理需要共享指针的跨平台代码。由于我无法控制的原因,我们还不能使用 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>。稍后我会将namespace my 中的boost 更改为std。但是,我无法决定每种方法的优缺点来做出决定。
【问题讨论】:
-
纯文本替换可能是一个可行的选择。
boost::shared_ptr->std::shared_ptr不太可能在任何地方出错。 -
我不想在后面用
std替换boost:( -
你可以写一个三行脚本来做到这一点。
-
请注意 boost/std 命名空间不是唯一的变化。如果使用占位符,C++11 会将它们放在 std::placeholders 命名空间中,因此 boost::_1 变为 std::placeholders::_1
-
如果编译器不支持,它要么是 std::shared_ptr 的别名,要么是 std::tr1::shared_ptr 下的 boost 实现。
标签: c++ boost shared-ptr template-aliases