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和...