c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。凡是函数体相同的函数都可以用这个模板代替,不必定义多个函数,只需在模板中定义一次即可。
- c++提供两种模板机制:函数模板和类模板
目录
一、函数模板
语法:
template< typename T > T是通用的数据类型
函数名(T&形参1 T&形参2....){ 函数实现 }
1.1 函数模板和普通函数区别
- 函数模板不允许自动类型转化,必须严格匹配类型。
- 普通函数能够自动进行类型转化
1.2 函数模板和普通函数在一起调用规则
- c++编译器优先考虑普通函数
- 如果想强制调用函数模板,需要加 空模板参数列表
- 函数模板可以像普通函数那样可以被重载
- 如果函数模板可以产生一个更好的匹配(不发生类型转化),那么选择模板
void myPrint(int a, int b)
{
cout << "普通函数myPrint调用" << endl;
}
template<class T>
void myPrint(T a, T b)
{
cout << "函数模板myPrint调用" << endl;
}
template<class T>
void myPrint(T a, T b,T c)
{
cout << "函数模板myPrint(a,b,c)调用" << endl;
}
void test02()
{
//1、如果普通函数和函数模板都可以匹配,优先使用普通函数
int a = 10;
int b = 20;
myPrint(a, b);
//2、如果想强制调用函数模板,需要加 空模板参数列表
myPrint<>(a, b);
//3、函数模板也可以发生函数重载
myPrint(a, b, 10);
//4、如果函数模板可以产生更好的匹配,那么优先使用函数模板
char c1 = 'c';
char c2 = 'd';
myPrint(c1, c2);
}