模板(进阶)

编程入门 行业动态 更新时间:2024-10-14 08:23:02

模板(<a href=https://www.elefans.com/category/jswz/34/1769503.html style=进阶)"/>

模板(进阶)

文章目录

    • 1.非类型模板参数
      • 1.1 定义:
      • 1.2 应用:
    • 2.模板特化(特化必须原模版)
      • 2.1类模板特化
      • 2.2 函数模板特化
    • 3模板的分离编译
      • 3.1 什么是分离编译
      • 3.2模板不能实现分离编译的原因(简):
      • 3.3解决方法
        • 实例化
          • 显示实例化
            • 函数的显示实例化
            • 模板的显示实例化
            • 函数的隐示实例化
            • 类的隐示实例化

1.非类型模板参数

1.1 定义:

本质:常量;

这里不可以传变量
** 该参数应用范围较少;多用于数组的下表访问**

这里传整形家族都可以:char或int;

1.2 应用:

array类

array的应用:

两者在物理上完全一样;
两者的区别

array可以预防越界访问;
原因:

前者是指针的解引用;
后者则是【】函数的调用;(“【】”的函数会检查是否越界)

2.模板特化(特化必须原模版)

2.1类模板特化

特化分为:全特化;偏特化;
偏特化又分为指针偏特化和部分特化和引用偏特化;
全特化

偏特化
部分特化,指针特化

引用特化

匹配遵循最匹配原则

2.2 函数模板特化

函数名后加特化的类型

函数模板不建议使用模板特化:

由于函数传参数时多传const类型的导致特化较为繁琐;
解决方法:
使用函数重定义

3模板的分离编译

3.1 什么是分离编译

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

3.2模板不能实现分离编译的原因(简):

由于每个.cpp文件都会进行预处理;编译;汇编;链接;
每个项目都会有两个或两个以上的文件;其中会有.h文件和cpp文件;这里的cpp文件都进行预处理;编译;汇编;链接;
这里的预处理会将.h文件进入.cpp文件。这里的cpp文件可以分为主文件和函数文件;如果这里的使用了函数模板;函数文件包含模板的声明和定义但是没有实例化;这就使这个函数没有被分配空间;也就没有函数地址;在主函数中函数调用时发现声明;这告诉编译器函数体在其他文件,要等到链接时再找;但是在链接时包含其他文件内只有模板的定义和声明
没有产生特定的一个lei或函数的地址;所以发生l链接错误
详细讲解

3.3解决方法

1.将声明和定义写在一起
2.在cpp文件内进行模板的实例化;

实例化
显示实例化
函数的显示实例化

tempate +函数定义(返回值+函数模板名+<类型>+返回值)

模板的显示实例化

tempate++类定义(class+类名+<类型>())

函数的隐示实例化

函数名+(实参)

类的隐示实例化

类名+<类型>+变量

更多推荐

模板(进阶)

本文发布于:2023-12-05 22:21:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665500.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进阶   模板

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!