#include <iostream>
using namespace std;
/************************************************************************/
/* 函数模板
1.自动类型推导,必须推导出一致的数据类型T才能使用
2.显示指定数据类型
3.模板必须确定出T的数据类型才能使用 */
/************************************************************************/
void swapInt(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void swapDouble(double &a, double &b)
{
double tmp = a;
a = b;
b = tmp;
}
//template声明一个函数模板,typename后面跟着数据类型,告诉编译器后面代码用到T不要报错,数据类型类型为T
//类型参数化,使用时直接传递
template<typename T>
void swapTemp(T &a, T &b)
{
T tmp = a;
a = b;
b = tmp;
}
void test1()
{
int a = 10;
int b = 20;
//1.自动类型推导,根据参数值自动推导出对应数据类型
swapTemp(a, b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
double c = 10.0;
double d = 20;
//2.显示指定数据类型
swapTemp<double>(c, d);
cout<<"c="<<c<<endl;
cout<<"d="<<d<<endl;
}
template<class T>
T addTemp(T a, T b)
{
return a+b;
}
void test2()
{
int a = 10;
double b = 20.8;
//3.自动推导必须推导出一致的数据类型T才能使用,不会发生隐式转换
//addTemp(a, b); error
//4.显示指定,可以发生隐式转换(double转换为int类型),有些类似普通函数参数类型转换
cout<<addTemp<int>(a, b)<<endl;
}
template <typename T>
void funTemp()
{
cout<<"funTemp函数调用"<<endl;
}
void test3()
{
//funTemp();//报错,不能确定模板T的数据类型
funTemp<int>();//模板函数无参数时,需要显示指定T的数据类型
}
int main()
{
test1();
test2();
test3();
return 0;
}
C++ 函数模板
最新推荐文章于 2023-05-22 19:44:26 发布