我正在将我的项目迁移到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
做同样的事......但是怎么样?宏?包装?我真的不喜欢他们中的任何一个。有哪些替代方案?
答案 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
}