升压:: shared_ptr的和std :: shared_ptr的的同居(Cohabitatio

2019-06-27 23:44发布

我想使用boost::log在某些时候,但我不能传递std::shared_ptr一个参数,因为编译器(VS2010),不能将其转换成一个boost::shared_ptr

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

是否有一个转换成另一种安全和透明的方式,让他们不要过度对方绊倒?

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

Answer 1:

你可以做这样的:

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弱引用工作。 所以,要小心那些!



文章来源: Cohabitation of boost::shared_ptr and std::shared_ptr