auto_ptr<A> base(...);
if(B* query = dynamic_cast<B>(base.get())) {
// take ownership
base.release();
auto_ptr<B> derived(query);
// use and/or pass derived around here
// ...
} else {
// no dice: leave base as owner
}
...それでdynamic_pointer_cast
作業を行うことにより、非推奨の機能の利用を促進するつもりはありませんあなたの選択は、その日それを呼び出す:
// Postcondition:
// where r is the returned pointer and p == from.get()
// EITHER r == 0 AND from.get() == p
// OR r.get() == dynamic_cast<To>(p) AND from == 0
template<typename To, typename From>
std::auto_ptr<To>
dynamic_pointer_cast(std::auto_ptr<From>& from)
{
To* query = dynamic_cast<To>(from.get());
return query ? from.release(), query : 0;
}
間違った方法はありますか?派生( 'A')から基底(' B')へ 'dynamic_cast'する必要はありません。 –
@Luc、はい、ありがとう。 –