typename 乙個用法

2021-05-22 02:03:31 字數 630 閱讀 4978

template

struct myiter

typedef t value_type; // 巢狀型別宣告(nested type)

t* ptr;

myiter(t* p=0) : ptr(p)

t& operator*() const

// ...

}; template

typename i::value_type// 這㆒整行是 func 的回返值型別

func(i ite)

// ...

myiter

ite(new int(8));

cout << func(ite); // 輸出:8

注意,func() 的回返型別必須加㆖關鍵字 typename,因為 t 是㆒個 template 參

數,在它被編譯器具現化之前,編譯器對 t ㆒無所悉,換句話說編譯器此時並不

知道myiter

::value_type 代表的是㆒個型別或是㆒個 member function 或

是㆒個 data member。關鍵字 typename 的用意在告訴編譯器說這是㆒個型別,

如此才能順利通過編譯。

怎麼多了乙個typename?

請看乙個例子 template t class example 哎,這裡怎麼多了乙個typename?問 不要行嗎?答曰 不行。問 為何?答曰 因為t iterator有三種可能 1.t型別有乙個靜態資料成員,其變數名為iterator 2.t型別有乙個靜態成員函式,其函式名為iterator 3....

C 模板程式設計之typename用法

例子來自 effective c 第三版 模板程式設計主要是編譯器在大發神威。模板函式基礎用法 typename用法 在展示上篇日誌結尾的遺留的問題前,先來說明模板程式設計中template宣告式中class和typename的關係。什麼是template宣告式?就是如下的語句 template觀察...

typename的一些用法和注意問題

一些關鍵概念 在我們揭開真實原因的面紗之前,先保持一點神秘感,因為為了更好的理解c 標準,有幾個重要的概念需要先行介紹一下。限定名和非限定名 限定名 qualified name 故名思義,是限定了命名空間的名稱。看下面這段 cout和endl就是限定名 include int main cout和...