1. ホーム
  2. c++

[解決済み] C++でオブジェクトの型を検索する

2022-03-10 07:44:11

質問

Aというクラスとそれを継承するBというクラスがあります。A型のオブジェクトをパラメータとして受け取る関数をオーバーライドしているので、Aを受け取らなければなりません。しかし、後でBしか持っていない関数を呼び出すので、渡されたオブジェクトがB型でない場合はfalseを返して処理を行わないようにしたいのです。

私の関数に渡されたオブジェクトがどの型であるかを調べる最良の方法は何でしょうか?

どのように解決するのですか?

dynamic_cast で解決できます。

TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);

dynamic_cast キーワードは、あるポインタや参照型から別の型にデータをキャストし、キャストの妥当性を実行時に確認します。

ポインタを実際のオブジェクトの型でない型にキャストしようとすると、キャストの結果はNULLになります。実際のオブジェクトの型でない参照をキャストしようとした場合、キャストは bad_cast 例外が発生します。

Dynamic_cast を動作させるために、Base クラスに少なくとも 1 つの仮想関数があることを確認します。

ウィキペディアのトピック ランタイム型情報

<ブロッククオート

RTTI は、ポリモーフィックなクラスでのみ利用可能です。 少なくとも1つの仮想メソッドを持っています。実際には、これは ベースクラスは仮想デストラクタを持つ必要があるため、制限を受けることになります。 派生クラスのオブジェクトが適切なクリーンアップを行うことができます。 を削除した。