1. 程式人生 > 實用技巧 >C++11 模板學習總結

C++11 模板學習總結

目錄

概念

函式模板(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)列表,它們被繫結到模板引數
  • 類模板的名字不是一個型別名,類模板是用來例項化型別的,而後者總是包含模板引數的;例外:在類模板自己的作用域中可以直接使用類模板名字(當作型別名)而不提供模板實參
  • 類模板的成員函式具有和類模板相同的模板引數;預設情況下,一個類模板的成員函式只有當程式用到它時才進行例項化