C++模板初阶

2.1函数模板

2.1函数模板概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本

2.2函数模板格式

template<typename T1,typename T2........typename Tn>

除了typename也可以使用class,这两者可以完全互换,甚至可以混合使用

返回值类型 函数名(参数列表){}

cpp 复制代码
template<typename T>
void Swap(T& left,T& right)
{
 T temp = left;
left = right;
right = temp
}

2.3函数模板的原理

函数模板本身并不是一个可以直接执行的函数,它更像是一个蓝图或模具。

当你定义一个函数模板时,你只是告诉编译器:"这里有一个函数的通用结构,其中某些类型是未知的,先用一个占位符(比如 T)代替。等以后真正用到这个函数时,再根据传入的具体类型来生成对应的函数代码。"

2.4函数模板的实例化

隐式实例化

这是最常见的方式。编译器会根据你调用函数时传入的实参类型,自动推导出模板参数 T 的具体类型,并生成对应的函数版本。

Add(a1, a2);

编译器看到 a1 和 a2 都是 int 类型。

它自动推导出 T 应该是 int。

然后,编译器会悄悄地生成一个具体的函数:int Add<int>(int a, int b) { return a + b; }。这个过程就是隐式实例化。

Add(d1, d2);

同理,编译器看到两个 double 类型的参数,推导出 T 是 double。

生成 double Add<double>(double a, double b)。
显式实例化

当你希望强制使用某个特定类型来实例化模板,或者编译器无法通过参数自动推导出类型时,就可以使用显式实例化。你通过在函数名后的尖括号 <> 中明确指定模板参数的类型来实现。

Add<int>(a1, d1);

这里你明确告诉编译器:"我要使用 int 版本的 Add 函数"。

编译器会生成 int Add<int>(int a, int b) 这个函数。

注意一个关键点:由于你指定了 T 为 int,函数的两个参数都必须是 int 类型。因此,在调用时,double 类型的 d1 会发生一次隐式类型转换,被截断为 int 后再传入函数。

3.类模板

3.1类模板的定义格式

template<class T1,class T2.....,class Tn>

class类模板名

{

//类内成员定义

}

cpp 复制代码
template<tyname T>
class Stack
{
public:
{
  Stack(int n = 4):_array(new T[n]),_size(0),_capacity(n)
  {}
  ~Stack()
{
  delete[] _array;
  _array = nullptr;
  _size = _capacity = 0;
}
void Push(const T& x)
{
if(_size == _capacity)
{
  T* tmp = new T[_capacity*2];
  memcpy(tmp,_array,sizeof(T)*_size);
  delete[] _array;
  _array = tmp;
  _capacity *= 2;
}
  _array[_size++] = x;
}
}
private:
   T* _array;
   size_t _capacity;
   size_t _size;    
}

这两个类类型不同

相关推荐
xie0510_2 分钟前
Any类简要实现
开发语言·c++·算法
小狼Solar6 分钟前
SAP MDG 功能范围说明(基于S/4HANA 2025)
java·开发语言
kimnoic6 分钟前
Python常用标准库模块及查询使用方法
开发语言·python
知识分享小能手22 分钟前
C学习教程,从入门到精通,C语言输入和输出(4)
c语言·开发语言·学习
道尔柯南22 分钟前
C++ 入门基础详解:从第一个程序到核心语法特性
开发语言·c++
盛世宏博智慧档案24 分钟前
Modbus TCP+PoE以太网温湿度传感器项目部署全流程,附网络调试实操
开发语言·tcp/ip·php·以太网·传感器·温湿度
bkspiderx26 分钟前
在 MFC 中添加自定义消息:从定义到使用的完整指南
c++·mfc·postmessage·sendmessage·mfc 中添加自定义消息·wm_app·on_message
ACP广源盛1392462567326 分钟前
Type-C 扩展坞方案选型笔记|国产 DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP 评估
开发语言·笔记·硬件架构·硬件工程·hdmi·国产芯片
纪念 22935 分钟前
C++ string(三)
android·c++
纪念 2291 小时前
c++ string(最终篇)
android·c++