shared_ptr に dynamic_cast しますか? 質問する

shared_ptr に dynamic_cast しますか? 質問する

A と B という 2 つのクラスがあり、B は A から継承します。

実際に B サブタイプであることがわかっているオブジェクトがある場合shared_ptr<A>、B の API にアクセスするために動的キャストを実行するにはどうすればよいでしょうか (オブジェクトが A だけでなく shared_ptr であることを念頭に置いてください)。

ベストアンサー1

関数を呼び出すだけの場合は、B次のいずれかを使用できます。

std::shared_ptr<A> ap = ...;
dynamic_cast<B&>(*ap).b_function();
if (B* bp = dynamic_cast<B*>(ap.get()) {
    ...
}

std::shared_ptr<B>実際にから を取得したい場合はstd::shared_ptr<A>、次のようにします。

std::shared_ptr<B> bp = std::dynamic_pointer_cast<B>(ap);

おすすめ記事