So erreichen Sie das C-Äquivalent von Javas Instanz von
In Java können Sie mit dem Operator „instanz von“ bestimmen, ob ein Objekt zu a gehört bestimmte Klasse oder Schnittstelle. In C gibt es mehrere Methoden, um diese Funktionalität zu erreichen.
Dynamisches Casting mit RTTI
Ein Ansatz ist die Verwendung von dynamischem Casting mit aktivierter Runtime Type Information (RTTI). Dazu müssen Sie die erforderlichen Header einfügen:
<code class="cpp">#include <typeinfo> #include <cxxabi.h></code>
Und dann können Sie eine dynamische Umwandlung durchführen mit:
<code class="cpp">if(NewType* v = dynamic_cast<NewType*>(old)) { // old was safely casted to NewType v->doSomething(); }</code>
Beachten Sie, dass für diesen Ansatz die RTTI-Unterstützung in Ihrem Compiler aktiviert sein muss .
Virtuelle Funktionen
Eine andere Methode ist die Verwendung virtueller Funktionen. Sie können eine virtuelle Funktion in der Basisklasse definieren und diese in abgeleiteten Klassen überschreiben. Anschließend können Sie den dynamischen Typ eines Objekts überprüfen, indem Sie seine virtuelle Funktion aufrufen:
<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>
Typschalter
Schließlich können Sie zur Bestimmung einen Typschalter verwenden der dynamische Typ eines Objekts. Dieser Ansatz basiert auf der Klasse 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>
Überlegungen
Obwohl diese Methoden eine ähnliche Funktionalität wie Javas „instanceof“-Operator bieten, ist es wichtig, sich an die dynamische Umwandlung zu erinnern und die Typprüfung kann zu Leistungseinbußen führen. Es wird empfohlen, die Verwendung alternativer Ansätze wie virtuelle Funktionen oder Typschalter in Betracht zu ziehen, um in kritischen Anwendungen eine bessere Leistung zu erzielen.
Das obige ist der detaillierte Inhalt vonWie erreicht man das C-Äquivalent des Java-Operators „instanceof'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!