c++中typename和class的區(qū)別介紹
相信學(xué)習(xí)C++的人對(duì)class這個(gè)關(guān)鍵字都非常明白,class用于定義類。在模板引入c++后,最初定義模板的方法為: template<class T>......
在這里class關(guān)鍵字表明T是一個(gè)類型,后來為了避免class在這兩個(gè)地方的使用可能給人帶來混淆,所以引入了typename這個(gè)關(guān)鍵字。它的作用同
class一樣表明后面的符號(hào)為一個(gè)類型,這樣在定義模板的時(shí)候就可以使用下面的方式了: template<typename T>......
在模板定義語(yǔ)法中關(guān)鍵字class與typename的作用完全一樣。
typename難道僅僅在模板定義中起作用嗎?其實(shí)不是這樣,typename另外一個(gè)作用為:使用嵌套依賴類型(nested depended name),如下所示:
class MyArray
{
public:
typedef int LengthType;
.....
}
template<class T>
void MyMethod( T myarr )
{
typedef typename T::LengthType LengthType;
LengthType length = myarr.GetLength;
}
這個(gè)時(shí)候typename的作用就是告訴c++編譯器,typename后面的字符串為一個(gè)類型名稱,而不是成員函數(shù)或者成員變量,這個(gè)時(shí)候如果前面沒有typename,編譯器沒有任何辦法知道T::LengthType是一個(gè)類型還是一個(gè)成員名稱(靜態(tài)數(shù)據(jù)成員或者靜態(tài)函數(shù)),所以編譯不能夠通過。
相關(guān)文章
wince程序防止創(chuàng)建多個(gè)實(shí)例實(shí)現(xiàn)互斥作用
什么時(shí)候用的互斥?當(dāng)你的程序只允許同時(shí)打開一個(gè)的時(shí)候,就可以通過互斥來實(shí)現(xiàn),下面說的互斥,主要是針對(duì)防止程序創(chuàng)建多個(gè)實(shí)例這種情況來實(shí)現(xiàn)的2014-02-02
C++ API功能設(shè)計(jì)的實(shí)現(xiàn)
C++ API中看似很小的修改,都可能會(huì)影響到生成的對(duì)象和庫(kù)文件的二進(jìn)制表示,如果客戶想替換共享庫(kù)使之工作,就不能簡(jiǎn)單的替換庫(kù)文件了事,而往往需要重新編譯2022-08-08
VC++實(shí)現(xiàn)程序開機(jī)啟動(dòng)運(yùn)行的方法
這篇文章主要介紹了VC++實(shí)現(xiàn)程序開機(jī)啟動(dòng)運(yùn)行的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
MySQL系列教程之使用C語(yǔ)言來連接數(shù)據(jù)庫(kù)
c語(yǔ)言操作Mysql數(shù)據(jù)庫(kù),主要就是為了實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查等操作,下面這篇文章主要給大家介紹了關(guān)于MySQL系列教程之使用C語(yǔ)言來連接數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09

