Java の「instanceof」演算子と同等の C 言語を実現するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-03 21:51:30
オリジナル
850 人が閲覧しました

How to Achieve the C   Equivalent of Java's

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!