模板函数的'typedef'(boost :: make_shared)

时间:2012-11-02 14:12:09

标签: c++ boost stl c++11

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

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

所以我为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做同样的事......但是怎么样?宏?包装?我真的不喜欢他们中的任何一个。有哪些替代方案?

1 个答案:

答案 0 :(得分: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
}