【C++】构造函数如何进行特化

常规思路

我们如果想特化一个构造函数,我们通常会这么想

但是一运行起来就行不通,就会报莫名其妙的错误 

可能我们并看不懂这个报错是什么意思,但是我们必须要记住一个最最最基本的语法

类中不能特化函数模板!!

不仅对于构造函数不可行,对于所有函数都是这个原则

类中不能特化函数模板!!

不要问那么多为什么,因为这是语法,是祖师爷创造的规则

 可行方法

1.将整个类特化

既然我们不能将其中某一个函数特化,那我们不妨粗暴一点,将整个类特化

当我们实例化为int时,会调用特化为int的类中的构造函数,而当我们实例化为其他时,则会调用第一个的构造函数,这是模板特化的性质,便不赘述

2.单独特化构造函数 

当然,如果一个类中函数太多,使用第一种方法不可避免会产生代码膨胀,那有没有其他可行的方法呢?

答案当然是可行,我们有一种单独特化构造函数的方法,那就是实例化类后再进行构造函数的定义

当然,这本质是一种函数重载,这与我们将其放入类中进行重载是相同的道理

当然,我们兜圈子的目的是为了应付构造函数不进行传参或传入参数与模板参数无关的情况

Like this:

此时,我们实例化int时就相当于对构造函数进行了特化

类中函数不能特化!!!

但是我们看以上几种方法,其实只分为了两种:

  1. 对函数进行重载
  2. 对类进行特化

实际上我们并没有对函数真正进行特化,我们只是通过其他的方式实现了类似对函数特化的效果,但是实际上,类中函数不能进行特化,不要多问,这是语法

并且,函数模板的特化其实很少用,毕竟重载可以解决的事情,为什么非要用特化呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值