一、函数模板
C++另一种编程思想称为泛型编程,主要利用的技术就是模板
C++提供两种模板机制:函数模板和类模板
函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法:
template<typename T>
or
template<class T>
函数声明或定义
解释:
template --- 声明创建模板
typename --- 表面其后面的符号是一种数据类型,可以用class代替
T --- 通用的数据类型,名称可以替换,通常为大写字母
#include<iostream>
using namespace std;//函数模板//交换两个整形函数
void swapInt(int &a, int &b)
{int temp = a;a = b;b = temp;
}//交换两个浮点型函数
void swapDouble(double &a, double &b)
{double temp = a;a = b;b = temp;
}//函数模板
template<typename T> //声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用数据类型
void mySwap(T& a, T& b)
{T temp = a;a = b;b = temp;
}void test()
{int a = 10;int b = 20;//swapInt(a, b);//利用函数模板交换//有两种方式使用模板//1.自动类型推导//mySwap(a, b);//2.显示指定类型mySwap<int>(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;//double c = 1.1;//double d = 2.2;//swapDouble(c, d);//cout << "c = " << c << endl;//cout << "d = " << d << endl;
}int main()
{test();return 0;
}
总结:
函数模板利用关键字 template
使用函数模板有两种方式:自动类型推导、显示指定类型
模板的目的是为了提高复用性,将类型参数化
二、函数模板注意事项
1.自动类型推导,必须推导出一致的数据类型T,才可以使用
2.模板必须要确定出T的数据类型,才可以使用
#include<iostream>
using namespace std;//函数模板注意事项
template<class T> //typename可以替换成class
void mySwap(T& a, T& b)
{T temp = a;a = b;b = temp;
}//1.自动类型推导,必须推导出一致的类型数据T才可以使用
void test01()
{int a = 10;int b = 20;char c= 'c';//mySwap(a, b);//正确!//mySwap(a, c);//错误!推导不出一致的T类型cout << "a = " << a << endl;cout << "b = " << b << endl;
}//2.模板必须要确定出T的数据类型,才可以使用
template<class T>
void func() //函数体中未用到T,调用时需要用到
{cout << "func函数的调用" << endl;
}void test02()
{func<int>();//未加int则出错,需要显示指定类型
}int main()
{//test01();test02();return 0;
}
总结: 使用模板时必须确定出通用数据类型T,并且能够推导出一致的类型