前言:这一篇是在我的上一篇文章的基础上,再进一步所写的。
链接:C++Template<>模版的介绍及深度解析-CSDN博客
一、类模板实例化
1.非类型模版参数
类型模版参数:就是跟在 class后面或者typename后的类型
非类型模版参数:用一个常量作为作为类(函数)模板的一个参数,在类中可以当作常量来用
2.函数模板的特化
有时候我们使用类模板不一定能解决我们的需求,因此我们需要单独写一份来实现。
比如下面的代码:
我们想要比较1和2的大小,模版可以完成。
但是当我们传过去变量的地址去比较,这样就不对了。我们想要比较的是值的大小,而不是地址的大小。因此我们需要特化一份出来,实现这个功能。
函数特化的步骤:
1.首先要有类模板
2.关键字template后跟一对<>
3.函数名后面跟一对<>,其中放需要特化的类型
4.形参要和模版中一样
3.类模板特化
3.1全特化
全特化,就是里面的参数类型都是确定的
3.2偏特化
3.2.1部分特化
将参数表中的一部分参数特化
3.2.2对参数进一步限制
偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一个特化版本。
将其特化为指针和引用:
二、注意事项
1.类模板的定义和声明要在同一个文件,不然容易出错
具体的报错原理,可以自己去研究。涉及类模板的分离编译。