1. 程式人生 > >C++ 中 typename

C++ 中 typename

//下面來討論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 指出下面緊跟著的名稱是一個型別