為什麼派生模板類別無法存取基本模板類別標識符
在C 中,派生模板類別可能無法直接存取標識符其基本模板類別。這種行為稱為兩階段查找,是由 C 規範強制執行的。
考慮以下程式碼片段:
template <typename T> class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; } template <typename T> class Derived : public Base<T> { public: Derived( bool initZero = NO_ZEROFILL ); // NO_ZEROFILL is not visible ~Derived(); }
在此範例中,衍生類別 Derived 無法直接存取來自其基底類別 Base 的 NO_ZEROFILL 識別碼。這是因為,在模板定義階段,編譯器沒有實際的類型來取代 T。因此,它無法解析 Base
此行為可確保即使使用不同類型實例化類,模板類中標識符的含義也是明確定義的。 Base
要解決所提供代碼中的問題,您可以使用基類名稱明確限定 NO_ZEROFILL 標識符,如下所示:
Derived( bool initZero = Base<T>::NO_ZEROFILL );
以上是為什麼派生模板類別不能直接存取基底模板類別標識符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!