[解決済み] 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つの仮想メソッドを持っています。実際には、これは ベースクラスは仮想デストラクタを持つ必要があるため、制限を受けることになります。 派生クラスのオブジェクトが適切なクリーンアップを行うことができます。 を削除した。
関連
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 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++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] C++における静的型チェックと動的型チェック
-
[解決済み] C++における'typeid'と'typeof'の比較