正文

回到頂部

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)聲明一個(gè)模板類型參數(shù)時(shí),class和typename意味著相同的事情。一些程序員喜歡使用class,因?yàn)槿菀浊么?。其他的(包括我)更加喜歡使用typename,因?yàn)橛盟砻鲄?shù)不需要是一個(gè)class類型。一些程序員在允許使用任何type的時(shí)候使用typename,只用對用戶自定義的類型使用class。但是從C++ 的觀點(diǎn)來看,在聲明模板參數(shù)的時(shí)候class和typename意味著相同的事情。

回到頂部

2. 必須使用typename的例子

然而,C++并不總是將class和typename同等對待。有時(shí)你必須使用typename。為了理解在什么時(shí)候必須使用,我們必須討論能夠在模板中引用的兩種名字。

假設(shè)我們有一個(gè)函數(shù)模板,用和STL兼容的容器作為模板參數(shù),此容器中包含的對象能夠被賦值給int類型。進(jìn)一步假設(shè)這個(gè)函數(shù)打印容器中的第二個(gè)元素值。我在下面以愚蠢的方式實(shí)現(xiàn)了一個(gè)愚蠢的函數(shù),它甚至不能通過編譯,但是請忽略這些事情,看下面的例子: 

 

網(wǎng)友評論