標頭檔案中的模板

模板需要編譯時生成程式碼:例如,一旦模板化函式通過在原始碼中使用引數化,模板化函式將有效地轉換為多個不同的函式。

這意味著模板函式,成員函式和類定義不能委託給單獨的原始碼檔案,因為任何使用任何模板化構造的程式碼都需要知道其定義通常生成任何派生程式碼。

因此,模板化程式碼(如果放在標題中)也必須包含其定義。下面是一個例子:

// templated_function.h

template <typename T>
T* null_T_pointer() {
  T* type_point = NULL; // or, alternatively, nullptr instead of NULL
                        // for C++11 or later
  return type_point;
}