2 回答

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