在 C 中,引用某個物件時需要「typename」關鍵字巢狀名稱是從屬名稱,即嵌套在具有未知參數的範本實例中。
從屬名稱是一個在編譯時無法完全解析的名稱,因為它依賴於模板參數。例如,在下面的程式碼中:
template<class K> class C { struct P {}; vector<P> vec; void f(); }; template<class K> void C<K>::f() { typename vector<P>::iterator p = vec.begin(); }
名稱向量
::iterator是一個依賴名稱,因為它依賴於模板參數K。在編譯時,編譯器不知道該值K,因此它無法完全解析名稱向量
::iterator。
「typename」關鍵字用來告訴編譯器該名稱vector
::iterator 是一個型別名稱,即使它無法在編譯時完全解析。這是必要的,因為編譯器需要知道變數 p 的類型才能產生正確的程式碼。
還有其他情況必須指定“typename”,例如引用巢狀類型時在範本類別中聲明。例如,在以下程式碼中:
template<class T> struct A { typedef typename T::type my_type; };
名稱 typename T::type 是在模板類別 A 內部宣告的巢狀類型名稱。在編譯時,編譯器不知道T,因此它無法完全解析名稱 typename T::type。
「typename」關鍵字用來告訴編譯器名稱 typename T::type 是一個型別名稱,即使它無法在編譯時完全解決。這是必要的,因為編譯器需要知道變數 my_type 的類型才能產生正確的程式碼。
以上是什麼時候需要 C `typename` 關鍵字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!