同居的boost :: shared_ptr和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的弱引用。 所以要小心这些!