什麼時候需要「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(); }
為什麼在此範例中需要「typename」關鍵字?
答案:
每當您引用巢狀名稱時,「typename」關鍵字都是必需的範本類別或函數,其中巢狀名稱的類型在編譯時未知。這稱為“從屬名稱”。
在 C 中,實體分為三類:值、型別和範本。其中每一個都可以有名稱,但名稱本身並不能表示該實體屬於哪個類別。因此,編譯器必須從上下文推斷實體類別。
當編譯器無法推斷類別時,您必須使用適當的關鍵字明確指定它:
在提供的程式碼中,嵌套名稱「向量
」是模板類別中的一種類型。但是,編譯器無法推斷這一點,因為類型參數“K”在編譯時未知。因此,需要“typename”關鍵字來明確指定“vector
”
必須指定「typename」的其他情況包括:
以上是C 模板中何時需要「typename」關鍵字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!