[解決済み] C++でオブジェクトの型を検索する
2022-04-24 08:38:16
質問
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つの仮想メソッドを持っています。実際には、これは ベースクラスは仮想デストラクタを持つ必要があるため、制限を受けることになります。 派生クラスのオブジェクトが適切なクリーンアップを行うことができます。 を削除した。
関連
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] JavaScriptで値がオブジェクトであるかどうかを確認する
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] C++における静的型チェックと動的型チェック
-
[解決済み] C++における'typeid'と'typeof'の比較