定義模板時typename和class的區別


       在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 則語法錯誤。
發佈了8 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章