行业知识
【C++】模板+模板特化
2026-11-10 07:49:43
来源:互联网转载
模板
- 泛型编程
- 模板
- 函数模板
- 定义
- 原理分析
- 函数模板的实例化
- 模板参数的匹配原则
- 类模板
- 定义
- 类模板的实例化
- 非类型模板参数
- 模板特化
- 定义
- 函数模板特化
- 类模板特化
- 应用实例
- 模板分离编译
- 原理分析
- 解决方法
- 模板总结
铁汁们,今天给大家分享一篇模板+模板特化,来吧,开造⛳️
泛型编程
定义:编写跟具体类型无关的通用代码,是实现代码复用的一种手段。模板是泛型编程的基础。
- 问:如何实现一个通用的swap函数?
- 答:写成函数模板,不能在函数重载了。原因:代码复用率低,重载的函数仅是类型不同,若出现了其他新的类型,代码的可维护性降低,若函数中有一处出错了,可能会导致所有的重载函数均出错。
模板
模板的本质:本来应该要由我自己写的多份类似代码(除类型不同,代码功能、逻辑相同),现在不需要我自己去写了,我只需要提供一个模板,编译器根据我的实例化,帮我写出代码。
函数模板
定义
函数模板代表了一个函数家族,函数模板与类型无关,在使用时被实例化,根据实例化的类型产生具体类型的函数版本。
- Tips : typename是用来定义模板参数的关键字,也可以使用class,但不能用struct代替class。
#pragma once#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;namespace zzx { //函数模板templatevoid swap(T& left, T& right){T& tmp = left;left = right;right = tmp;}}int main(){int a = 3;int b = 4;cout templatereturn left + right;}double Add(double& left, double& right){return left + right;}int Add(int& left, int& right){return left + right;}}int main(){int a = 1;int b = 2;cout templatereturn left + right;}}int main(){cout T1 a ;T2 b;}int main(){funtemplateT* a;size_t top;size_t capacity;};}int main(){zzx::stack//非类型模板参数,只能是整形常量template private:T a[N]; //定义一个静态数组size_t size;};}int main(){//array为STL中的一个容器,底层为静态数组,不会初始化,只会在越界的时候进行检查报错zzx::arraypublic:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}bool operatorreturn (_year
- Tips : typename是用来定义模板参数的关键字,也可以使用class,但不能用struct代替class。
上一篇:列表解析扩展使用
下一篇:测速服务器很慢怎么办?