自学内容网 自学内容网

模板-函数模板基本语法

#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 接受两个参数 ab,分别是类型 TU,并且返回类型为 T

5. 类型推断

在大多数情况下,编译器能够根据函数参数推断出模板参数的类型,因此可以省略模板参数的显式指定。

int result = add(3, 4.5);   // 编译器推断 T 为 int, U 为 double

原文地址:https://blog.csdn.net/weixin_61839295/article/details/140686017

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!