C Java の Instanceof と同等:dynamic_cast と代替アプローチ
Java の instanceof 演算子を使用すると、オブジェクトが特定のインスタンスであるかどうかを確認できます。クラスまたはそのサブクラス。 C では、dynamic_cast を使用して同様の機能を実現できます。
<code class="cpp">if (NewType* v = dynamic_cast<NewType*>(old)) { // Cast succeeded, old is a NewType object v->doSomething(); }</code>
この方法では、コンパイラで実行時型情報 (RTTI) が有効になっている必要があります。ただし、dynamic_cast にはパフォーマンスが犠牲になる可能性があります。
代替アプローチ:
<code class="cpp">switch (old->getType()) { case BOX: // old is a Box object break; case SPECIAL_BOX: // old is a SpecialBox object break; }</code>
このアプローチには RTTI は必要ありませんが、マルチレベルの継承には適していません。
注: 動的型チェックは設計上の問題を示す可能性があるため、その必要性を検討してください。多くの場合、仮想関数や列挙型アプローチなどの代替手段により、より優れた設計とパフォーマンスが提供される可能性があります。
以上がC で Java の `instanceof` 機能を実現する方法: `dynamic_cast` とその代替手段?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。