繁体   English   中英

boost :: shared_ptr和std :: shared_ptr的同居

[英]Cohabitation of boost::shared_ptr and std::shared_ptr

我想在某个时候使用boost::log ,但是我不能将std::shared_ptr用作参数,因为编译器(VS2010)无法将其转换为boost::shared_ptr

我真的不喜欢他们是彼此的外星人。

有没有一种安全透明的方式可以将彼此转换为彼此,以免彼此绊倒?

我认为这两个问题不是重复的,因为两者都相同。

您可以这样做:

template<typename T>
boost::shared_ptr<T> make_shared_ptr(std::shared_ptr<T>& ptr)
{
    return boost::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}

template<typename T>
std::shared_ptr<T> make_shared_ptr(boost::shared_ptr<T>& ptr)
{
    return std::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}

编辑:请注意,这不适用于对源ptr的弱引用。 所以要小心那些!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM