實際上可以說沒有區別。
按 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 則語法錯誤。
以下這篇文章介紹得比較詳細:
http://blogs.msdn.com/b/slippman/archive/2004/08/11/212768.aspx
實際上可以說沒有區別。
按 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 則語法錯誤。
以下這篇文章介紹得比較詳細:
http://blogs.msdn.com/b/slippman/archive/2004/08/11/212768.aspx