如何實現C 語言中的Java 的instanceof
在Java 中,「instanceof」運算子可讓您確定一個物件是否屬於某某個物件特定的類別或介面。在 C 中,有多種方法可以實現此功能。
使用 RTTI 進行動態轉換
一種方法是使用啟用了運行時類型資訊 (RTTI) 的動態轉換。這要求您包含必要的標頭:
#include
#include
然後您可以使用以下指令執行動態轉換:
if(NewType* v = dynamic_cast(old)) {
// old was safely casted to NewType
v->doSomething();
}
請注意,此方法需要在編譯器中啟用 RTTI 支援。
虛擬函數
另一種方法是使用虛擬函數。您可以在基底類別中定義虛函數並在衍生類別中重寫它。然後,您可以透過呼叫物件的虛擬函數來檢查物件的動態類型:
class Base {
public:
virtual void doSomething() {}
};
class Derived : public Base {
public:
void doSomething() override {}
};
...
if(auto* derived = dynamic_cast(old)) {
derived->doSomething();
}
型開關
最後,您可以使用型別開關來決定物件的動態型別。這種方法依賴 type_info 類別:
if(old.IsSameAs(typeid(NewType))) {
// old was safely casted to NewType
NewType* v = static_cast(old);
v->doSomething();
}
注意事項
雖然這些方法提供與Java 的“instanceof”運算符類似的功能,但重要的是要記住動態轉換和類型檢查可能會導致效能損失。建議考慮使用虛擬功能或類型開關等替代方法,以便在關鍵應用程式中獲得更好的效能。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3