您提供的程式碼片段在 C 中實作了 is_base_of 特徵,它檢查一個類別是否從另一個類別繼承。它使用一種稱為“奇怪的重複模板模式”(CRTP)的技術。
Host 是一個模板類,它包裝派生類並提供訪問其運算符 B* 的方法功能。當我們想要檢查 B 是否是 D 的基底類別時,我們呼叫 is_base_of::value。
檢查函數重載了兩個函數:
運算子B* 必須是 const,否則在選擇呼叫哪個檢查函數時會產生歧義。透過 const 關鍵字,編譯器知道使用接受 B* const& 的檢查函數。
第一個檢查函數更好,因為它使用了使用者- 定義從 D* 轉換為 B* 的轉換序列。這比第二個檢查函數更具體,後者使用使用者定義的轉換序列從 B* 轉換為 int。
以上是使用 CRTP 的 C `is_base_of` 實作如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!