我正在将我的项目迁移到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
Run Code Online (Sandbox Code Playgroud)
现在我需要做同样的事make_shared......但是怎么样?宏?包装?我真的不喜欢他们中的任何一个.有哪些替代方案?
使用可变参数模板和完美转发:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |