目录
1、函数模板:
reference:https://www.cnblogs.com/arxive/p/5224151.html
函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。
函数模板的声明形式为:
template<typename 数据类型参数标识符>
<返回类型><函数名>(参数表)
{
函数体
}
其中,template是 定义模板函数的关键字;template后面的尖括号不能省略;typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标 识符是数据类型标识符。这样,在以后定义的这个函数中,凡希望根据实参数据类型来确定数据类型的变量,都可以用数据类型参数标识符来说明,从而使这个变量 可以适应不同的数据类型。例如:
template<typename T>
T fuc(T x, int y)
{
T x;
//……
}
如果主调函数中有以下语句:
double d;
int a;
fuc(d,a);
则系统将用实参d的数据类型double去代替函数模板中的T生成函数:
double fuc(double x,int y)
{
double x;
//……
}
函数模板只是声明了一个函数的描述即模板,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型代替类型参数标识符之后,才能产生真正的函数。
关键字typename也可以使用关键字class,这时数据类型参数标识符就可以使用所有的C++数据类型。
2、函数模板和模板函数的区别
reference:https://zhidao.baidu.com/question/89198494.html
2.1 函数模板的定义
不管它们的性质如何,所有的函数模板都具有同样的基本格式:
template<参数说明>
函数头
函数体
例如,下面是一个2参数的模板的声明:
template<class T>
T max(T param1 ,T param2)
{
//此处为函数体
}
2.根据上面已定义的模板,编译器将可生成下面的模板函数(都是对的,函数模板的目的就是函数重载):
char * max(char * a, char * b) //模板函数1
{
return (a>b)?a:b;
}
int max(int a, int b) //模板函数2
{
return (a>b)?a:b;
}
double max(double a, double b) //模板函数2
{
return (a>b)?a:b;
}
3、类模板
reference:https://www.runoob.com/cplusplus/cpp-templates.html