C++模板template
引言
在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:
这个函数只支持int参数,那么float、long等怎么办呢,函数重载需要好几个函数,很麻烦,我们可以使用模板
函数模板
模板函数定义的一般形式如下所示:
template <typename 类型占位符> 返回值类型占位符 函数名(参数列表) { 函数的主体 }
注意:typename等价于class
#include <iostream> template<typename T> void swap(T& t1, T& t2) { //函数模板的定义 T tmpT; tmpT = t1; t1 = t2; t2 = tmpT; } int main() { int num1 = 1, num2 = 2; swap<int>(num1, num2);//函数模板的调用 std::cout << "num1=" << num1 << "," << "num2=" << num2 << std::endl; return 0; }
如果函数模板写在不同文件中,在.h文件的尾部要导入.cpp文件
类模板
格式为:
template<class 形参名,class 形参名,…>
class 类名{ ... };
#include <iostream> //类模板的定义 template<class T,class T1> class A { public: A(T a, T1 b) :m_i(a), m_f(b) {} T m_i; T1 m_f; void print() { std::cout << m_i << std::endl; std::cout << m_f << std::endl; } T print1() { return m_i + 100; } }; int main() { A<int, float> aa(10,55.6);//创建对象 aa.print(); int x = aa.print1(); std::cout << "x=" << x<<std::endl; return 0; }
如果在类模板外实现函数体(h和cpp文件分开)时,注意书写格式:
template<class T,class T1> void A<class T,class T1>::print() { }
说明:template<class T,class T1> 是模板帽子
A<class T,class T1> 是编译后相应的类名
函数模板作为类模板成员
#include <iostream> template<class T> class A { public: A(T a) :m_i(a){} T m_i; //成员函数模板 template <class T1> void Func(T1 t) { std::cout << t<<std::endl; } }; int main() { A<int> aa(10); aa.Func(89.6); //成员函数模板Func被实例化 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)