c++0x では、std::shared_ptr 用の std::static_pointer_cast がありますが、std::weak_ptr 用の同等のメソッドはありません。これは意図的なものですか、それとも見落としですか?見落としがある場合、適切な関数をどのように定義しますか?
5964 次
3 に答える
13
これはあなたのためにそれをするはずです:
template<class T, class U>
std::weak_ptr<T>
static_pointer_cast(std::weak_ptr<U> const& r)
{
return std::static_pointer_cast<T>(std::shared_ptr<U>(r));
}
これは、weak_ptr の有効期限が切れている場合に例外をスローします。nullのweak_ptrを取得したい場合は、r.lock()
代わりに使用してください。
于 2011-05-19T23:59:49.637 に答える
6
Howard のバージョンは正しいですが、多くの場合、weakptr.lock() をパラメーターとして std::static_pointer_cast に渡すだけで十分です。
std::weak_ptr<A> a = ...;
std::weak_ptr<B> b = std::static_pointer_cast<B>(a.lock());
この構文は何が起こっているかを明示的に示し、コードを読みやすくします。
于 2014-10-23T17:44:25.210 に答える