函数模板
程序员文章站
2022-03-15 22:23:12
...
结构
template <typename type1>type1 ave(type1 a, type1 b)
{
type1 x = a * b;
type1 p [100];
return (a + b) / 2;
}
//type1 类型名称
关键字:
- template<> :函数模板必须带的关键字,声明这是一个函数模板
- <>:填入函数类型名称
- typename 类型名称 :类型名称
使用方法:
template<>
int* ave(int* a,int *b)
{
return 1;
}//函数模板的例外情况
int main()
{
//函数模板与普通函数的调用方法相同
//函数模板可以显示的指定一个类型
//下例中执行的是 int ave(int a,int b) 而不是 float ave(float a, float b);
std::cout << ave<int>(12.0f, 250.5f) << std::endl;
//隐式调用时,函数模板会根据传入的参数的类型进行转换
std::cout << ave(11, 12) << std::endl;
//函数模板也可以为单个参数指定类型
std::cout << ave((char)11 ,(char)12);
//函数模板指针的错误用法
int a{1},b{2},c{3};
c = *ave(&a, &b);//此时传入的不是a、b的值,而是传入指针*a、*b
//如果定义了函数模板的例外情况 则会调用例外来实现
}
要点
函数模板中声明的模板类型可以当作一个类型来使用,使用范围与其他类型相同。可以用来声明变量、指针、数组等;
函数模板可以以显式的方式为一个模板函数指定一个类型。
函数重载的优先级大于函数模板。如果有函数重载的函数存在调用函数重载,不存在函数重载,但是存在例外模板函数时,会优先调用例外模板函数。
函数模板也可以重载,函数模板的重载与普通函数的重载类似,通过参数数量来进行区分。
下一篇: 系统没报错,为什么这句不能执行!