47

boost::logある時点で使用したいのですがstd::shared_ptr、コンパイラー(VS2010)がに変換できないため、パラメーターとして渡すことができませんboost::shared_ptr

私は彼らがお互いにエイリアンであるという事実が本当に好きではありません。

お互いにつまずかないように、安全で透過的な方法で相互に変換する方法はありますか?

両方が同じであると述べているのは、この質問と重複しているとは思いません。

4

1 に答える 1

75

あなたはこのようにそれを行うことができます:

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

于 2012-09-07T09:07:04.643 に答える