模板进阶(C++初阶结束)
1.非类型模板参数模板参数分为类型形参和非类型形参类型形参出现在模板参数列表中跟class或者typename之类的参数类型名称非类型形参就是用一种常量作为类函数模板的一个参数在类函数模板中可将该参数当成常量来使用(相较于宏的好处在于宏是写死的这个参数的数值取决于你传进去的值)注意1.浮点数类对象以及字符串是不允许作为非类型模板参数的C20后开始接受浮点数2.非类型模板参数必须在编译期就能确认结果仿函数 重载了 () 的类 普通函数无法保存状态数据 “有记忆的智能函数”特化 模板的特殊版本 通用模板无法处理特殊类型如指针、自定义对象 “给特殊情况开的VIP通道”2.模板的特化2.1概念通常情况下使用模板可以实现一些与类型无关的代码但对于一些特殊的可能会得到一些错误的结果需要特殊处理比如实现一共专门用来进行小于比较的函数模板第三种情况就是变成了指针的比较但是我们需要的是指向内容的比较2.2函数模板特化函数模板特化步骤1.必须先有一共基础的函数模板2.关键字template后面接一对空的尖括号3.函数名后面跟一对尖括号尖括号种指定需要特化的类型4.函数形参表必须要和模板函数的基础参数类型完全相同包括const和引用不同的编译器容易报不同的错误意思就是当遇到date*时自动进入这个流程实现函数的特化const的修饰是就近原则这样写会报错的原因是下面的特化中const修饰的是指针意思是你无法改变指向只有将const提到前面才能实现想表达的意思才能和上面的参数意义完全相同2.3类模板的特化2.3.1全特化全特化即是将模板参数列表中所有的参数都确定化2.3.1偏特化偏特化是针对任何模板参数进一步进行条件限制的特化版本3.模板的分离编译3.1什么是分离编译一个程序由若干个源文件共同实现而每个源文件单独编译生成目标文件最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式因为编译器原因到第四步时如果被链接的函数没有进行实例化最后就会编译错误所以需要显示实例化除了这个办法外还可以直接在.h文件里面定义4.总结模板的优点1.模板复用了代码节省资源更快的迭代开发CSTL标准库因此而产生2.增强了代码的灵活性模板的缺点1.模板会导致代码膨胀的问题也会导致编译时间变长2.出现模板编译错误时报错信息非常凌乱不容易发现报错
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2608896.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!