Java の instanceof と同等の C を実現する方法
Java では、「instanceof」演算子を使用して、オブジェクトがオブジェクトに属しているかどうかを判断できます。特定のクラスまたはインターフェイス。 C では、この機能を実現する方法がいくつかあります。
RTTI を使用した動的キャスト
1 つのアプローチは、実行時型情報 (RTTI) を有効にして動的キャストを使用することです。これには、必要なヘッダーをインクルードする必要があります:
<code class="cpp">#include <typeinfo> #include <cxxabi.h></code>
そして、次を使用して動的キャストを実行できます:
<code class="cpp">if(NewType* v = dynamic_cast<NewType*>(old)) { // old was safely casted to NewType v->doSomething(); }</code>
このアプローチでは、コンパイラーで RTTI サポートが有効になっている必要があることに注意してください。 .
仮想関数
もう 1 つの方法は、仮想関数を使用することです。基本クラスで仮想関数を定義し、派生クラスでそれをオーバーライドできます。次に、仮想関数を呼び出してオブジェクトの動的タイプをチェックできます。
<code class="cpp">class Base { public: virtual void doSomething() {} }; class Derived : public Base { public: void doSomething() override {} }; ... if(auto* derived = dynamic_cast<Derived*>(old)) { derived->doSomething(); }</code>
Type Switch
最後に、タイプ スイッチを使用して決定できます。オブジェクトの動的タイプ。このアプローチは type_info クラスに依存します。
<code class="cpp">if(old.IsSameAs(typeid(NewType))) { // old was safely casted to NewType NewType* v = static_cast<NewType*>(old); v->doSomething(); }</code>
考慮事項
これらのメソッドは Java の "instanceof" 演算子と同様の機能を提供しますが、動的なキャストを覚えておくことが重要です。また、型チェックによってパフォーマンスが低下する可能性があります。クリティカルなアプリケーションのパフォーマンスを向上させるために、仮想関数やタイプ スイッチなどの代替アプローチの使用を検討することをお勧めします。
以上がJava の「instanceof」演算子と同等の C 言語を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。