C++函数模板介绍(template)

C++函数模板介绍

函数模板的引入

一般来讲,我们在书写一个函数时,他的参数类型是确定的。比如有下面的函数原型:

void Swap(int &a,int &b);

从函数原型可以看到,这是一个交换函数。功能是将传入的a,b的值进行交换。
但是我们也可以看到,传入的参数都是int型的,因此只能交换两个int型的值。
那么问题来了:如果我向交两个double型的变量,我是不是又要写一个函数呢(当然,运用函数重载确实可以体现C++的多态性),但是还有其它类型呢?long,sort,long long…
所以我们需要引入另一个概念——模板 来实现这样的功能,使得我们只写一个函数就完成所有的泛型参数的传入。

函数模板关键字——template

函数模板的关键字是——template

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

通过上面代码可以看到,通过关键字template定义了一个泛型类型,用关键字typename来定义,其中AnyType只是一个名字,可以反正任意C++的规范命名,比如“T”(而且这种命名也更常见)也可以

template <typename T>

例子

现在我们,通过一个例子来查看模板函数的定义和使用

#include<iostream>
using namespace std;
template <typename T>
void Swap(T &a,T &b);

int main()
{
    
    
	int i=10;
	int j=20;
	cout<<"i,j="<<i<<","<<j<<".\n";
	cout<<"Using compiler generated int swapper:\n";
	Swap(i,j);
	cout<<"Now i,j="<<i<<","<<j<<".\n";
	
	double x=24.5;
	double y=81.7;
	cout<<"x,y="<<x<<","<<y<<".\n";
	cout<<"Using compiler generated double swapper:\n";
	Swap(x,y);
	cout<<"Now x,y="<<x<<","<<y<<".\n";
	return 0;
}

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

运行之后,输出:
在这里插入图片描述
可以看到,两次调用Swap函数,一次是int型,一次是double型,但是只写了一个函数,节省了很多的代码量

——————————————————————————————————————————————————————————————————————
参考书籍:《C++ Primer Plus 6th》

猜你喜欢

转载自blog.csdn.net/rjszz1314/article/details/104347935