所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。
凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。
一 函数模板初识
1) 为什么要有函数模板?
函数业务逻辑一样,但是函数参数类型不一样,引入泛型编程,方便程序员编程。
2) 语法:
template <typename T>
void myswap(T &a,T &b)
{
}
a: tempalte是告诉C++要进行泛编程,看到T不要随便报错。
b :T表示类型
3) 调用
a:显式调用:
myswap(x,y);
myswap(a,b);
b: 自动类推导
myswap(x,y);//根据参数类型来自动匹配
#include <iostream>
using namespace std;
// 函数的业务逻辑 一样
// 函数的参数类型 不一样
void myswap01(int &a, int &b)
{
int c = 0;
c = a;
a = b;
b = c;
}
void myswap02(char &a, char &b)
{
char c = 0;
c = a;
a = b;
b = c;
}
template <typename T>
void myswap(T &a, T &b)
{
T c = 0;
c = a;
a = b;
b = c;
cout << "hello ....我是模板函数 欢迎 calll 我" << endl;
}
void main()
{
{
int x = 10;
int y = 20;
myswap<int>(x, y); //1 函数模板 显示类型 调用
myswap(x, y); //2 自动类型 推导
printf("x:%d y:%d \n", x, y);
}
{
char a = 'a';
char b = 'b';
myswap<char>(a, b); //1 函数模板 显示类型 调用
myswap(a, b);
printf("a:%c b:%c \n", a, b);
}
}
4 函数模板作函数参数
#include <iostream>
using namespace std;
//让int数组进行排序
template <typename T,typename T2 >
int mySort(T *array, T2 size)
{
T2 i, j ;
T tmp;
if (array == NULL)
{
return -1;
}
//选择
for (i=0; i<size; i++)
{
for (j=i+1; j<size; j++)
{
if (array[i] < array[j])
{
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
return 0;
}
template <typename T, typename T2>
int myPrint(T *array, T2 size)
{
T2 i = 0;
for (i=0; i<size; i++)
{
cout << array[i] << " ";
}
return 0;
}
void main()
{
//char 类型
{
char buf[] = "a