6

我正在将我的项目迁移到 C++11,并且我正在尝试尽可能多地使用标准库。

在完成迁移之前,我需要一种快速的方法来在 boost 和 STL 实现之间shared_ptr切换(进行基准测试、单元测试等)。

所以我为shared_ptr这样定义了一个别名:

#ifdef _USE_BOOST_
template <class C>
using shared_ptr = boost::shared_ptr<C>
#else
template <class C>
using shared_ptr = std::shared_ptr<C>
#endif 

现在我需要为make_shared...做同样的事情但是如何?宏?一个包装?我真的不喜欢他们中的任何一个。有哪些替代方案?

4

1 回答 1

7

使用可变参数模板和完美转发:

template<typename C, typename...Args>
shared_ptr<C> make_shared(Args &&...args) {
#ifdef _USE_BOOST_
  return boost::make_shared<C>(std::forward<Args>(args)...);
#else
  return std::make_shared<C>(std::forward<Args>(args)...);
#endif
}
于 2012-11-02T14:17:14.513 回答