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

A 'typedef' for a template function (boost::make_shared)

本文关键字:make shared boost typedef 函数      更新时间:2023-10-16

我将项目迁移到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做同样的事情...但是如何?宏?包装纸?我真的不喜欢他们中的任何一个。什么是替代方案?

使用variadic模板和完美的转发:

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
}