欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数模板

程序员文章站 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
		//如果定义了函数模板的例外情况 则会调用例外来实现
}

要点

   函数模板中声明的模板类型可以当作一个类型来使用,使用范围与其他类型相同。可以用来声明变量、指针、数组等;

   函数模板可以以显式的方式为一个模板函数指定一个类型。

   函数重载的优先级大于函数模板。如果有函数重载的函数存在调用函数重载,不存在函数重载,但是存在例外模板函数时,会优先调用例外模板函数。

    函数模板也可以重载,函数模板的重载与普通函数的重载类似,通过参数数量来进行区分。