• 使用模板可以基于占位符类型来定义函数或者类,这样我们就可以定义出配合不同类型工作,但是结构完全一致的函数或者类。被实例化的函数或者类,称为函数实例类实例
  • 所有的模板函数或模板类,都必须以模板参数声明开头。在模板参数声明中,我们需要指定模板的类型参数或表达式参数。模板类型参数其实就是占位符类型,通常会写作TT1T2或者其他单独字母(例如S)。表达式参数通常是整型类型,但是也可以是指针或者引用类型(指向某个函数,对象或成员函数)。
  • 模板类及其成员函数定义并不能像其他一般类那样进行分离——你不能将类的定义放在头文件中然后将成员函数的定义放在.cpp文件中。通常情况下,最好将它们都定义在一个头文件中,模板类的定义在前,其成员函数的定义在后。
  • 当要针对特定类型重载模板函数或模板类的默认行为时,我们可以使用模板特化。如果重写了所有类型,则被称为全特化。类还支持偏特化,其中只有部分模板参数被特化。函数不能被偏特化。
  • C++标准库中的很多类都使用了模板,包括 std::arraystd::vector。模板经常被用来实现容器类,这样的容器类就可以配合任意类型的对象来使用。