模板编程主要涉及函数模板、类模板、成员函数模板以及泛化、全特化、偏特化的概念。
模板编程
模板本身概念比较简单,主要包含函数模板、类模板、类成员函数模板
比较麻烦的是友元函数模板和关于类模板的继承
函数模板
函数模板可以进行自动类型推导,如下所示:
1 | template<class T> |
函数重载调用优先级 精确匹配的函数模板 > 可以精确匹配的函数模板 > 指定类型需要进行自动类型转换的函数模板 > 需要进行自动类型转换的普通函数。
类模板
类模板就是把类成员变量的类型用模板定义
1 | template <class T> |
类成员函数模板
类成员模板就是把函数模板作为类的成员函数
1 | template <class T> |
泛化
上述的举例子都是泛化的例子
特化(全特化)
(全)特化则是模板的类型进行了具体化
类模板全特化
1 | template <class T> |
函数模板全特化
1 | template <class T> |
偏特化
类模板偏特化,重载时挑选最匹配的。
1 |
|
C++标准中,模板函数不能偏特化,但是可以重载。但是发现我写了类似偏特化的版本没有报错,但是不会去调用它。
1 |
|