C++ 中 typename
阿新 • • 發佈:2019-02-02
//下面來討論typename的第二種用法。現在假設我們有一個類如下: template <typename T> class Y { T::iterator *iter; ... }; /* 我們可能本意是想定義一個迭代器物件,例如我們如果用vector<int>來例項化這個模板,那麼iter 則應該是一個迭代器指標,但是,如果我們用下面這個類來例項化這個模板:*/ class cType { static int iterator; ... }; /* 那麼T::iterator *iter會被編譯器解釋為兩個數相乘。事實上,C++編譯器會採用第二種解釋方法 ,即使iterator的確是一個型別名。 為了避免這種矛盾,當我們適用qualified dependent name的時候,需要用typename來指出這是一個 型別名.即:*/ template <typename T> class Y { typename T::iterator *iter; typedef typename T::iterator iterator; //定義了Y::iterator型別名稱 ... }; //typename 指出下面緊跟著的名稱是一個型別