C++中的模板用法详解

作者 : 前沿资讯 本文共1755个字,预计阅读时间需要5分钟 发布时间: 2020-03-8 共48人阅读

**

因为本人之前一直写的是电子笔记,对自己学会的东西作一个总结,所以基本都是文字,本来想全发成博客的形式,发现全发成博客比较花费时间,而且一直发博客质量不是很好,而且通过发博客学到的东西也会变少,所以准备先把笔记发出来,后续再将它们改成博客的形式,争取2天至少改一篇博客,觉得我总结的还行的可以先关注我,后续会发成博客形式,内容也会更加完善

**
模板:
模板可以有二种传参方式,一种是根据模板要求的那样在<>内写上你要生成的模板类型,如果在定义时有缺省的可以不写,还有一种叫做类型推导的方法,并不是c++11提出的那个类型推导(auto之类),而是函数本身的类型推导,在你给函数传参时,一般情况下,因为你知道函数需要什么类型的值,所以你可以直接传不用声明,但换成类模板后,你往函数中传参,因为它是一个函数,所以在理论上你不用写类型的声明,函数是可以接收的,只是在接收后它的类型要做出判断,现在我们的函数是一个模板函数,它的类型可以任何类型,所以它在做出判断时,就可以直接确定函数参数的类型,进而使用,这也是函数唯一在模板这块可以有的变化,不用显示写出参数的类型,可以自动作推导,但类模板就不行,因为实例化一个类,它不是马上就用的,所以你必需传模板参数
模板还有非类型模板和类型模板之分,类型好理解,就是你要给模板传什么类型,非类型是指你在模板中已经定义好了类型,然后用这个类型定义出了一个这个类型的变量,然后你可以给这个值给一个缺省值,或者你可以直接传值,之后,你可以把它想象成已经定义好的常量来使用,就是提前定义好了,不需要在类中再重新定义为一个成员,为什么说当做一个常量,因为它是不可修改的,它有一些限制,不能传浮点的类型和类类型
还有一个模板的分离式编译:
就是说你在一个cpp文件中定义了一个模板函数,但是你在hpp中对它做了声明,然后在另一个cpp文件中包含了hpp头文件,想使用这个函数,但是使用不了了,因为c++在编译时,hpp是不参数编译的,在你使用时,因为hpp里面只是做了一个声明,但它并不知道你已经在别的文件中定义的这个模板函数,因为我们在编译时,一个文件一个文件的编译所以头文件只是知道有这么个东西,也有这个函数的地址,但它认为你没有定义(也就是实现这个函数),所以你不能使用它,所以要解决这个问题只要在声明它的地方,定义它就行了,不要分离定义
模板的特化:
模板的特化分为:全特化和偏特化两种
为什么要进行模板的特化,原因是在我们使用模板时会出现几个问题,首先就是模板只认识单个类型比如:char, int等,而一但我们向模板函数传进去的是char*它就不认识了,还有就是因为模板的存在让类相当于有了类型,这和函数的重载很像,当我们想让同一个类名,不同类型使用不同代码时我们就会用到特化,相当于类的重载,这个也可以理解为这个类名代表了这个作用,我不想改,但不同的类型我用的方法不同,所以我就可以利用重载,进行模板特化的原因大概是这两点
全特化和偏特化都是要在已经有一个完整的模板的情况下,不然后没必要使用特化
全特化是指:将原来的模板变量全都变成确定的类型,要在函数名或类名后面加上<>,在<>里面写出要特化的类型
偏特化是指:将原来的模板变量中的部分变量变成确定的类型,比如原来有两个模板变量,现在有一个要特化,还是要加<>的,但里面的值,一个是模板变量一个是确认的类型,还有一种情况,就是因为模板只认一个类型,所以当我们用指针或者引用时,它就不认识了,但我们不知道是哪种类型的指针,所以它也可以做偏特化,就是在<>中在模板变量后面再加一个指针或引用的符号就行了
此外需要注意的是
1.特化和重载是不同的,重载函数后的参数可以少,特化不能,我觉得这样做的原因是,我们本来做的就是一个模板,就是一个模型,所以这个模型就不应该不一样,哪块都不能少,我们的特化只是为了在做模型的原料上进行一个优化,不想改变模板的特点
2.特化时你要用到的类型个数必须和原来的模板类型个数相同
3.在使用模板函数时,你的特化时的类型顺序,就是你函数参数的类型顺序,并且你函数参数前的类型必须写上
4,在类中不受顺序的影响,它就像是一个标记,来说明你是哪一个

本文来互联网采集,已注明来源,如未注明来源可能来源未知,如有侵权请联系站长删除处理。

1. 本站所有资源来源于网络和用户上传,如有侵权请联系站长或邮件至xiaoqiblog@163.com
2. 本站分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,商用请支持正版!不得违反国家法律,否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

小七博客 » C++中的模板用法详解

Leave a Reply

售后服务:

  • 售后服务范围 1、商业模板使用范围内问题免费咨询
    2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
    3、单价超过200元的模板免费一次安装,需提供服务器信息。
    付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
    2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
    3、服务器环境配置(一般 ¥50-300)
    4、网站中毒处理(需额外付费,500元/次/质保三个月)
    售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
    免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: xiaoqiblog@163.com),我们会及时删除,给您带来的不便,我们深表歉意!

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系作者
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡