[C++/STL]模板进阶

———————————————————————————————————

模板参数分类:1.类型模板参数   

  2.非类型模板参数(常量--只能是整型常量

特化:

有全特化和偏特化的区分,偏特化之中又有部分特化限制特化的区分,接下来详细来看:

 函数模板特化

1. 必须要先有一个基础的函数模板( 重要 )
2. 关键字 template 后面接一对空的尖括号 <>
3. 函数名后跟一对尖括号,尖括号中指定需要特化的类型
4. 函数形参表 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误。

类模板特化:

全特化:全特化即是将模板参数列表中所有的参数都确定化。

偏特化:

1.部分特化:将模板参数类表中的一部分参数特化。

2.更进一步的去限制参数:

偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一个特化版本。

 

模板的分离编译(报错原因)

分离编译

        一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。
比如,下面这种情况会链接报错:

为什么会这样呢?我们从根本上来探讨这个问题

 C或者C++的程序在运行前,会有一下的步骤:

预处理:头文件展开//宏定义//条件编译//去掉注释等等

编译:检查语法,生成汇编代码(此时的汇编还是给程序员看的)

汇编:将汇编代码转为二进制机械码

链接:合并生成可执行文件(如是分离编译就是将多个obj文件合成一个,处理没有解决的地址问题)

 

解决方法:

1.将声名和定义放到同一个.hpp(只用来暗示是模板)文件或者.h 文件里面即可。

这样就不用在链接的时候去其他obj找地址(即不需要链接),.h被展开后在同一个源文件里,在编译时就成功实例化=>就可以匹配好地址然后调用。

2.显示实例化,但是不常用

模板总结:

【优点】
1. 模板复用了代码,节省资源,更快的迭代开发, C++ 的标准模板库 (STL) 因此而产生
2. 增强了代码的灵活性
【缺陷】
1. 模板会导致代码膨胀问题,也会导致编译时间变长
2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误(出现时建议看首行的报错)

相关推荐

  1. C++:模板

    2024-04-27 01:06:01       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 01:06:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 01:06:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 01:06:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 01:06:01       20 阅读

热门阅读

  1. 想要活得充实,必须做到以下7点。

    2024-04-27 01:06:01       12 阅读
  2. leetcode2739--总行驶距离

    2024-04-27 01:06:01       12 阅读
  3. [leetcode] 1071. 字符串的最大公因子

    2024-04-27 01:06:01       16 阅读
  4. MySQL 联合索引的原理及失效原理

    2024-04-27 01:06:01       17 阅读
  5. bgzip解压.gz文件并保留原文件

    2024-04-27 01:06:01       13 阅读
  6. 嵌入式软件工程师要会画板子吗?

    2024-04-27 01:06:01       14 阅读
  7. 《设计模式之美》第四章 总结

    2024-04-27 01:06:01       12 阅读
  8. python常见的语法详解

    2024-04-27 01:06:01       14 阅读
  9. 泰国SAP项目须知- 泰国企业经营税务要点和BOI

    2024-04-27 01:06:01       18 阅读
  10. 算法训练营day24

    2024-04-27 01:06:01       13 阅读
  11. GD32F4xx 通用定时器输出PWM

    2024-04-27 01:06:01       12 阅读