常规思路
我们如果想特化一个构造函数,我们通常会这么想
但是一运行起来就行不通,就会报莫名其妙的错误
可能我们并看不懂这个报错是什么意思,但是我们必须要记住一个最最最基本的语法
类中不能特化函数模板!!
不仅对于构造函数不可行,对于所有函数都是这个原则
类中不能特化函数模板!!
不要问那么多为什么,因为这是语法,是祖师爷创造的规则
可行方法
1.将整个类特化
既然我们不能将其中某一个函数特化,那我们不妨粗暴一点,将整个类特化
当我们实例化为int时,会调用特化为int的类中的构造函数,而当我们实例化为其他时,则会调用第一个的构造函数,这是模板特化的性质,便不赘述
2.单独特化构造函数
当然,如果一个类中函数太多,使用第一种方法不可避免会产生代码膨胀,那有没有其他可行的方法呢?
答案当然是可行,我们有一种单独特化构造函数的方法,那就是实例化类后再进行构造函数的定义
当然,这本质是一种函数重载,这与我们将其放入类中进行重载是相同的道理
当然,我们兜圈子的目的是为了应付构造函数不进行传参或传入参数与模板参数无关的情况
Like this:
此时,我们实例化int时就相当于对构造函数进行了特化
类中函数不能特化!!!
但是我们看以上几种方法,其实只分为了两种:
- 对函数进行重载
- 对类进行特化
实际上我们并没有对函数真正进行特化,我们只是通过其他的方式实现了类似对函数特化的效果,但是实际上,类中函数不能进行特化,不要多问,这是语法
并且,函数模板的特化其实很少用,毕竟重载可以解决的事情,为什么非要用特化呢?