C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 類型參數可以使用任何名字(通常命名為 T)
template <typename Foo> Foo calc (const Foo& a, const Foo& b){Foo tmp = a; / / tmp 的類型與參數和返回類型一樣//...return tmp; // 返回類型和參數類型一樣 }1.1 模板參數與作用域
一個模板參數名的可用范圍:聲明之后, 至模板聲明或定義結束之前。
- 與任何其他名字一樣, 模板參數會隱藏外層作用域中聲明的相同名字。
- 一個模板參數名在一個特定模板參數列表中只能出現一次(與大多數其他上下文不同, 在模板內不能重用模板參數名)
1.2 模板聲明
模板聲明必須包含模板參數
/ / 聲明但不定義 compare 和 Blob template <typename T> int compare (const T &, const T & ); template <typename T> class Blob;- 與函數參數相同, 聲明中的模板參數的名字不必與定義中相同,但必須有相同數量和種類( 即, 類型或非類型) 的參數。
1.3 使用類的類型成員
為了處理模板, 編譯器必須知道名字是否表示一個類型。
例如, 假定 T 是一個類型參數的名字,語句有歧義: T::sizetype * p;
- 一個名為 p 的變量?
- 一個名為 SiZe_type 的 static 數據成員與名為 p 的變量相乘?
默認情況下, C++語言假定通過作用域運算符訪問的名字不是類型。 因此, 如果我們希望使用一個模板類型參數的類型成員, 就必須顯式告訴編譯器該名字是一個類型。 我們通過使用關鍵字 typename 來實現這一點:
//top 函數期待一個容器類型的實參, 它使用 typename 指明其返回類型并在 c //中沒有元素時生成一個值初始化的元素( 參見 7.5.3 節, 第 262 頁) 返回給調用者.template <typename T> typename T::value_type top (const T& c ) {if (!c.empty ( ) )return c.back ( ) ;elsereturn typename T::value_type ( ); }總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha