我想使用boost::log
在某些时候,但我不能传递std::shared_ptr
一个参数,因为编译器(VS2010),不能将其转换成一个boost::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弱引用工作。 所以,要小心那些!