在C 語言中實作「instanceof」功能
Java 中的「instanceof」運算子允許開發人員檢查物件是否屬於特定類別或接口。 C 缺乏完全相同的功能,但有一些方法可以實現類似的功能。
支援RTTI 的動態轉換
首選方法涉及使用運行時類型資訊(RTTI) 進行動態轉換):
<code class="cpp">if (NewType* v = dynamic_cast<NewType*>(old)) { // old was safely casted to NewType v->doSomething(); }</code>
注意,此方法需要RTTI 支援
使用getType() 方法
另一種不需要RTTI 的方法是在基底類別中定義getType() 方法:
<code class="cpp">if (old->getType() == BOX) { Box* box = static_cast<Box*>(old); // Do something box specific }</code>
但是,這種方法在處理多個層級的繼承。
注意事項
在使用動態轉換之前質疑其必要性非常重要。糟糕的設計可能會導致其過度使用。考慮使用虛擬函數或訪客來實現更物件導向的方法。
此外,與動態轉換相比,getType() 方法有效能缺陷。
以上是我們怎麼能在C中實作Java的「instanceof」功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!