头文件中的模板

模板需要编译时生成代码:例如,一旦模板化函数通过在源代码中使用参数化,模板化函数将有效地转换为多个不同的函数。

这意味着模板函数,成员函数和类定义不能委托给单独的源代码文件,因为任何使用任何模板化构造的代码都需要知道其定义通常生成任何派生代码。

因此,模板化代码(如果放在标题中)也必须包含其定义。下面是一个例子:

// 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;
}