模板
顾名思义,就是如果存在同样功能但数据类型不同的函数或者类,分别写出不同的定义很冗余,所以将数据类型用一个记号统一表示(参数化),把这些不同函数(或者不同类)给统一成一个模板,这就是数据类型参数化
函数模板
.h文件
template<typename T> T func1(T a) { //函数功能 }
定义如上,使用template和typename关键字,表示这是一个模板,T代表任意的数据类型
.cpp文件
int main() { int b=0; int a = func1(b); return 0; }
使用如上,函数模板会自动识别类型
类模板
.h文件
template<typename T> class Myclass { public:
Myclass();
T func1(); }
template<typename T>
T Myclass<T>::func1();
定义如上,不同的是,类模板的类函数定义时,类名需要加上<T>
.cpp文件
int main() { Myclass<double> a; }
*模板的定义和实现一般来说一起写在头文件 ,如果分开写则会导致编译不通过。另外一种方法是在实现模板所在的cpp文件进行实例化
如例子:
// 2.h #pragma once template<typename T> T func1(T a, T b); //2.cpp #include "2.h" template<typename T> T func1(T a, T b) { return a + b; } template int func1<int>(int,int); template float func1<float>(float, float); //main.cpp #include<iostream> #include "2.h" int main() { int a = 1, b = 2; float c = 1.0, d = 2.0; int f1 = func1(a, b); float f2 = func1(c,d); return 1; }
主函数用到int和float型的实例,而模板在2.h中定义,在2.cpp中实现,则需要在2.cpp中分别实例化<int>和<float>
template int func1<int>(int,int); template float func1<float>(float, float);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通