模板-函数模板基本语法
#include<iostream>
using namespace std;
//函数模板
template<typename T>
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
//两种方式使用函数模板
//1、自动类型推导
//mySwap(a, b);
//2、显示指定类型
mySwap<int>(a, b);
cout << "a= " << a << endl;
cout << "b= " << b << endl;
}
int main()
{
test01();
}
当我们需要编写能够处理多种数据类型的函数时,函数模板就显得格外重要。C++中的函数模板允许我们编写一个通用的函数,可以接受不同类型的参数,从而实现代码的复用和灵活性。
函数模板基本语法
1. 声明函数模板
函数模板的声明使用 template
关键字加上模板参数列表来定义。模板参数列表用尖括号 < >
括起来,参数可以是类型参数或者非类型参数。
template <typename T>
void myFunction(T arg);
在上面的例子中,T
是一个类型参数,表示函数 myFunction
接受一个类型为 T
的参数 arg
。
2. 定义函数模板
函数模板的定义与普通函数类似,但在函数名后面要紧跟模板参数列表的定义。
template <typename T>
void myFunction(T arg) {
// 函数体
}
在函数体内,可以使用类型参数 T
来处理参数 arg
,例如可以对 arg
进行算术操作、函数调用等。
3. 实例化函数模板
函数模板本身并不是一个具体的函数,它仅仅是一个通用的模板。要使用函数模板处理特定类型的数据,需要进行实例化。实例化是通过在函数调用时指定具体的类型来完成的。
int main() {
myFunction(5); // 编译器实例化 myFunction<int>(5);
myFunction(3.14); // 编译器实例化 myFunction<double>(3.14);
myFunction('a'); // 编译器实例化 myFunction<char>('a');
return 0;
}
在实例化时,编译器会根据函数参数的类型自动推断出需要调用的函数模板版本,并生成相应的代码。
4. 多个模板参数
函数模板可以有多个模板参数,这些参数可以是类型参数、非类型参数或模板模板参数(template template parameters)。
template <typename T, typename U>
T add(T a, U b) {
return a + b;
}
在上面的例子中,函数模板 add
接受两个参数 a
和 b
,分别是类型 T
和 U
,并且返回类型为 T
。
5. 类型推断
在大多数情况下,编译器能够根据函数参数推断出模板参数的类型,因此可以省略模板参数的显式指定。
int result = add(3, 4.5); // 编译器推断 T 为 int, U 为 double
原文地址:https://blog.csdn.net/weixin_61839295/article/details/140686017
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!