從模板化父類別存取繼承變數
提供的程式碼片段說明了繼承類別Bar 嘗試存取其受保護變數的場景父類別Foo,它是一個模板類別。然而,編譯器會產生錯誤,導致人們對編譯器是否遵守標準感到困惑。
根據 C 標準,模板中的非限定名稱被認為是非依賴的,必須在定義模板時解決。由於專門的基類模板在模板定義期間可能不可用,因此未解析的不合格名稱會導致錯誤。
這適用於基類中宣告的變數和函數,如 Bar 可以存取的範例所示a using 限定名稱或 using 宣告。後者允許派生類別內進行不合格的訪問,從而解決了最初的錯誤。
例如,以下程式碼修改解決了該問題:
template<class T> int Bar<T>::Perna(int u) { int c = Foo<T>::a * 4; // Qualified name c = this->a * 4; // Pointer to own instance using Foo<T>::a; c = a * 4; // Using declaration }
透過澄清查找規則並提供替代解決方案,這個解釋強調了模板解析的細微差別,並幫助開發人員理解編譯器行為背後的基本原理。
以上是繼承類別如何存取 C 中模板化父類別中受保護的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!