So erreichen Sie ein C-Äquivalent von Javas Instanz von
In Java können Sie mit dem Operator „instanceof“ 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:
#include
#include
Und dann können Sie eine dynamische Umwandlung durchführen mit:
if(NewType* v = dynamic_cast(old)) {
// old was safely casted to NewType
v->doSomething();
}
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:
class Base {
public:
virtual void doSomething() {}
};
class Derived : public Base {
public:
void doSomething() override {}
};
...
if(auto* derived = dynamic_cast(old)) {
derived->doSomething();
}
Typschalter
Schließlich können Sie einen Typschalter verwenden, um den dynamischen Typ eines Objekts zu bestimmen. Dieser Ansatz basiert auf der Klasse type_info:
if(old.IsSameAs(typeid(NewType))) {
// old was safely casted to NewType
NewType* v = static_cast(old);
v->doSomething();
}
Überlegungen
Obwohl diese Methoden eine ähnliche Funktionalität wie Javas „instanceof“-Operator bieten, ist es wichtig zu bedenken, dass dynamisches Casting und Typprüfung zu Leistungseinbußen führen können. 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3