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への弱参照では機能しないことに注意してください。だからそれらに注意してください!