C++11 模板學習總結
阿新 • • 發佈:2020-10-25
目錄
概念
函式模板(function template)
template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; if (v2 < v1) return 1; return 0; } template <unsigned N, unsigned M> int compare(const char (&p1)[N], const char (&p1)[N]) { return strcpm(p1, p2); }
- 型別模板引數(type parameter):型別說明符,T 為型別引數
- 非型別模板引數(nontype parameter):表示值而不是型別
- 非型別模板引數的模板實參必須是常量表達式
類模板(class template)
- 編譯器不能為類模板推斷模板引數,因此需要在程式碼中提供顯式模板實參(explicit template argument)列表,它們被繫結到模板引數
- 類模板的名字不是一個型別名,類模板是用來例項化型別的,而後者總是包含模板引數的;例外:在類模板自己的作用域中可以直接使用類模板名字(當作型別名)而不提供模板實參
- 類模板的成員函式具有和類模板相同的模板引數;預設情況下,一個類模板的成員函式只有當程式用到它時才進行例項化