ある時点でboost::log
を使用したいのですが、コンパイラー(VS2010)がstd::shared_ptr
に変換できないため、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への弱参照では機能しないことに注意してください。だからそれらに注意してください!