Ste*_*and 43 c++ boost shared-ptr c++11
我想boost::log
在某些时候使用,但我不能传递std::shared_ptr
一个参数,因为编译器(VS2010)无法将其转换为boost::shared_ptr
.
我真的不喜欢他们是外星人的事实.
是否有一种安全透明的方式将一个转换为另一个,因为它们不会相互绊倒?
我不认为这两个问题都是相同的.
ron*_*nag 72
你可以这样做:
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();});
}
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,这不适用于源ptr的弱引用.所以要小心那些!