了解 is_base_of 特徵實現
is_base_of 特徵可讓我們確定一種類型是否為另一種類型的基類。該實現採用了涉及模板元編程和用戶定義轉換的複雜技術。
辨識繼承
當類型 B 是 D 的基底類別時, is_base_of特質傳回 true。這是透過定義兩個檢查函數來實現的:
然後基於對Host呼叫檢查的結果的大小來設定常數值。實例。如果大小與 sizeof(yes) 相同,則表示 B 是 D 的基底。
const 修飾符的作用
運算子 B*( Host 結構中的 ) 和運算子 D*() 成員函數被宣告為 const。這確保了來自主機的轉換。選擇到 B* 而不是轉換到 D*。這種區別對於識別私有繼承至關重要,因為當 B 為私有時,編譯器無法從 D* 轉換為 B*。
模板元編程
模板檢查函數模板 static yes check(D*, T) 比static yes check(B*, int) 更好,因為它允許編譯器根據模板參數T 產生適當的轉換函數。如果沒有這個,我們需要定義兩個 check( D*, B*) 和 check(D*, Derived*) 對於每對輸入類型。這展示了模板元編程在減少樣板程式碼方面的強大功能。
以上是'is_base_of” 特性如何決定 C 中的基類關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!