模板函数

对于一个简单的加法运算来说,我们给出它的代码:
int add(int m, int n)
{
	return m + n;
}
但是现在情况再复杂一些,我们现在要计算浮点类型的加法,我们又要重新写一个代码:
float add(float m, float n)
{
	return m + n;
}

这样的情况下,只要有新的类型出现,我们就要添加新的函数并且代码的利用率不高。观察这两个函数,很明显,整型加法和浮点型的加法只有参数类型和返回值类型有区别。这时候,我们不妨大胆的给出一个函数,它既能计算整型加法,又能计算浮点型加法。这时候,我们有了适应所有数据类型的泛型编程的思路。

下面我们给出上面代码的模板函数:

template<class T>
T add(T m, T n)
{
	return m + n;
}
调用的时候说明类型,如:
add<int>(1,2);

可以看到,采用模板的方法时,它的编写与类型无关,可以明显的提高代码的复用率。


模板上图过程中被调用两次:

第一次:实例化前,检查模板是否有误。

第二次:实例化后,查看是否所有调用都有效。

事实上,模板并不是函数或者类。编译器用模板产生指定类型的函数或类的过程称为模板实例化。

一个非模板函数可以和一个同名的模板函数同时存在,而且该函数模板还可以被实例化为这个非模板函数。

若程序中有模板函数和函数,调用的时候会优先调用函数,而不会用模板来生成函数。



猜你喜欢

转载自blog.csdn.net/weixin_36229332/article/details/78585965