如何實作與Java 的instanceof 等價的C 語言
在Java 中,「instanceof」運算子可讓您確定物件是否屬於某個物件特定的類別或介面。在 C 中,有多種方法可以實現此功能。
使用 RTTI 進行動態轉換
一種方法是使用啟用運行時類型資訊 (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 支援.
虛函數
另一種方法是使用虛函數。您可以在基底類別中定義虛函數並在衍生類別中重寫它。然後,您可以透過呼叫物件的虛擬函數來檢查物件的動態類型:
<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_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中文網其他相關文章!