2 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
實(shí)際上可以說沒有區(qū)別。
按 C++ 標(biāo)準(zhǔn)來說,template<typename T> 用于基礎(chǔ)數(shù)據(jù)類型,typename 指類型名,T 可以取 char int double 等。
template<class T> 用于類,T 可以取任何類。
但是這里有一個(gè)問題,結(jié)構(gòu)體應(yīng)該用 typename 還是 class? 結(jié)構(gòu)體肯定不是基礎(chǔ)數(shù)據(jù)類型,但也不是類。
所以實(shí)際情況是,template<class T> 的 T 也可以取基礎(chǔ)數(shù)據(jù)類型,tempate<typename T> 的 T 也可以取類。
但有一個(gè)特例,就是當(dāng) T 是一個(gè)類,而這個(gè)類又有子類(假設(shè)名為 innerClass) 時(shí),應(yīng)該用 template<typename>:
typename T::innerClass myInnerObject;
這里的 typename 告訴編譯器,T::innerClass 是一個(gè)類,程序要聲明一個(gè) T::innerClass 類的對(duì)象,而不是聲明 T 的靜態(tài)成員,而 typename 如果換成 class 則語法錯(cuò)誤。
添加回答
舉報(bào)