在c++Template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?
相信學習C++的人對class這個關鍵字都非常明白,class用於定義類,在模板引入c++後,最初定義模板的方法爲: template<class T>......
在這裏class關鍵字表明T是一個類型,後來爲了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同
class一樣表明後面的符號爲一個類型,這樣在定義模板的時候就可以使用下面的方式了: template<typename T>
按 C++ 標準來說,template<typename T> 用於基礎數據類型,typename 指類型名,T 可以取 char int double 等。
template<class T> 用於類,T 可以取任何類。
但是這裏有一個問題,結構體應該用 typename 還是 class? 結構體肯定不是基礎數據類型,但也不是類。
所以實際情況是,template<class T> 的 T 也可以取基礎數據類型,tempate<typename T> 的 T 也可以取類。
但有一個特例,就是當 T 是一個類,而這個類又有子類(假設名爲 innerClass) 時,應該用
template<typename>:typename T::innerClass myInnerObject;
這裏的 typename 告訴編譯器,T::innerClass 是一個類,程序要聲明一個 T::innerClass 類的對象,而不是聲明 T 的靜態成員,而 typename 如果換成 class 則語法錯誤。