2

私は高度な C++ トピックの研究の初心者なので、質問があまりにも明白に聞こえる場合はご容赦ください。

私は、一般に RTTI と呼ばれる、C++ で実行時にオブジェクトの型の情報を取得できるさまざまな方法について読んでいます。

しかし、私はそれがどのように機能するかについて混乱しています。RTTI が説明されているときによく言及されることをいくつか読みました。それらの 1 つは、オブジェクトを他のオブジェクトに動的にキャストするための dynamic_cast<> の使用です。もう 1 つの方法は、typeid を使用して実行時にオブジェクトの型を判別することです。

typeid を使用することが C++ で RTTI を実装する正しい方法であるかどうかを知りたいのですが、そうである場合、typeid 演算子は実際にどのようにして実行時にオブジェクトの型を判別できるのでしょうか (オブジェクト blob のビット パターンを分析しますか?メモリー? )

typeid の使用が正しい方法でない場合は、その実装に別の方法を提案してください。

4

2 に答える 2

2

RTTI は、仮想関数を持つクラスのインスタンスでのみ機能します。この場合、コンパイラは仮想テーブル ポインターを呼び出すクラスに特別なメンバーを追加します。仮想関数を持つ各クラスには、独自の仮想テーブルがあります。どの仮想テーブルが指されているかを調べることで、オブジェクトの特定のタイプを判別できます。

于 2013-04-28T18:41:28.523 に答える