我想在某个时候使用boost::log
,但是我无法将std::shared_ptr
作为参数传递,因为编译器(VS2010)无法将其转换为boost::shared_ptr
。
我真的不喜欢他们是彼此的外星人。
有没有一种安全透明的方式可以将彼此转换为彼此,以免彼此绊倒?
我认为这不是this question的重复,即声明两者相同。
最佳答案
您可以这样做:
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的弱引用。所以要小心那些!
关于c++ - boost::shared_ptr和std::shared_ptr的同居,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12314967/