Template函数模板

新手自学C++,以此文档作为学习笔记。

一、为什么要有函数模板

假设我们要实现一个函数,其功能为输入两个参数,我们交换这两个参数的值,应该怎么写函数呢?

void Swap(int&a, int&b)
{
	int tmp = a;
	a = b;
	b = tmp; 
}

但是又有一个问题,如果传输的参数数其他类型呢,交换string,交换double,又该怎么做呢?那我们可能想到的就是函数重载:

void Swap(int&a, int&b)
{
	int tmp = a;
	a = b;
	b = tmp; 
}

void Swap(double&a, double&b)
{
	double tmp = a;
	a = b;
	b = tmp;
}

void Swap(string&a, string&b)
{
	string tmp = a;
	a = b;
	b = tmp;
}

C++里面有多少中类型啊,我们不可能针对每一种情况都进行函数重载,要是有一个函数能够做到不约束参数类型就好了。比如下面代码,anytype可以是任何类型,而函数内的处理逻辑是一样的,此时就需要用到函数模板了。

void Swap(anytype &a, anytype &b)
{
	anytype tmp = a;
	a = b;
	b = tmp;
}

二、函数模板

1.定义

函数模板就是一个通用的函数,函数类型和形参不确定,用一个虚拟的类型来代表。凡是函数体相同的函数都可以用这个模板来代替。编译器自动推导实参的数据类型,生成该类型的函数定义。

2.两个关键字

template:告诉编译器,下面的泛型编程部分。
typename:告诉编译器,此处允许任意变量类型。

3.具体使用

template <typename anytype>
void Swap(anytype &a, anytype &b)
{
	anytype tmp = a;
	a = b;
	b = tmp;
}

在我们使用时,有两点值得注意
1) anytype :
anytype 作为typename 后面定义的变量名,这个名字可以随便取。我们看到的代码一般是直接用大写字母 “T”来表示。
2)typename
typename关键字是在C++98之后添加的,但是很多人不习惯用typename,那也可以用“class”代替“typename”关键字。
重新展示一下上面的代码:

template <class T>
void Swap(T &a, T &b)
{
	T tmp = a;
	a = b;
	b = tmp;
}

这就是我们在一般的开源项目中看到的模板函数了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值