C++模板基础1——定义函数模板

函数模板定义格式

模板函数定义格式如下:

template 
返回类型 函数名(参数列表) {
    // 函数体
}

其中,template是模板声明,用于定义模板参数 T。可以使用不同的关键字代替 typename,例如 class

返回类型是函数返回的数据类型,可以是基本数据类型、自定义数据类型或者 void

函数名是函数的名称,可以根据需要命名。

参数列表是函数的参数,可以是零个或多个参数,参数之间用逗号分隔。每个参数都可以有自己的数据类型和名称。 

函数体是函数的具体实现。在模板函数中,可以使用模板参数 T 来代表不同的数据类型。

例如,定义一个模板函数来计算数组的平均值:

template 
T average(T arr[], int size) {
    T sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum / size;
}

在调用模板函数时,需要指定模板参数的具体类型。例如,调用模板函数计算整型数组的平均值:

int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int avg = average(arr, size);

实例化函数模板

我们先定义一个函数模板

template 
int compare(const T& vl, const T& v2)
{
	if (v1 < v2) return -1;
		if (v2 < v1) return 1;
			return 0;
}

当我们调用一个函数模板时,编译器(通常)用函数实参来为我们推断模板实参,即,当我们调用compare时,编译器使用实参的类型来确定绑定到模板参数T的类型。

例如,在下面的调用中:

cout << compare(1, 0) << endl; // T为int

实参类型是int。编译器会推断出模板实参为int,并将它绑定到模板参数T。

编译器用推断出的模板参数来为我们实例化一个特定版本的函数。

当编译器实例化一个模板时,它使用实际的模板实参代替对应的模板参数来创建出模板的一个新“实例”。

例如,给定下面的调用:

// 实例化出 int compare(const int&, const int&)
cout << compare(1, 0) << endl;// T为int

//实例化出 int

你可能感兴趣的:(c++,开发语言)