正文
1. class和typename含義相同的例子
問題:在下面的模板聲明中class和typename的區(qū)別是什么?
1 template<class T> class Widget; // uses “class”2 3 template<typename T> class Widget; // uses “typename”
答案:沒有任何區(qū)別。當(dāng)聲明一個模板類型參數(shù)時,class和typename意味著相同的事情。一些程序員喜歡使用class,因為容易敲打。其他的(包括我)更加喜歡使用typename,因為用它表明參數(shù)不需要是一個class類型。一些程序員在允許使用任何type的時候使用typename,只用對用戶自定義的類型使用class。但是從C++ 的觀點來看,在聲明模板參數(shù)的時候class和typename意味著相同的事情。
2. 必須使用typename的例子
然而,C++并不總是將class和typename同等對待。有時你必須使用typename。為了理解在什么時候必須使用,我們必須討論能夠在模板中引用的兩種名字。
假設(shè)我們有一個函數(shù)模板,用和STL兼容的容器作為模板參數(shù),此容器中包含的對象能夠被賦值給int類型。進一步假設(shè)這個函數(shù)打印容器中的第二個元素值。我在下面以愚蠢的方式實現(xiàn)了一個愚蠢的函數(shù),它甚至不能通過編譯,但是請忽略這些事情,看下面的例子:
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式