C++中函数模板及其全特化
时间: 2023-08-24 08:10:44 浏览: 143
函数模板是一种通用的函数定义,它允许编写能够处理多种不同类型的数据的函数。函数模板的定义以关键字 `template` 开头,后面跟着模板参数列表和函数的原型。
例如,以下是一个简单的函数模板,用于交换两个值:
```c++
template <typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
```
上述代码中,`typename T` 表示这是一个类型参数,可以接受任何类型的数据。在函数体中,我们只是简单地交换了两个值。
使用函数模板时,需要将具体的类型传递给模板参数,例如:
```c++
int a = 5, b = 10;
swap<int>(a, b); // 交换 a 和 b 的值
```
在上述示例中,我们显式地将 `int` 作为模板参数传递给 `swap` 函数。
函数模板还支持全特化,这意味着我们可以为特定的类型提供一个特定的实现。全特化使用关键字 `template<>` 手动指定模板参数列表中的类型,并提供一个特定的函数实现。
例如,以下是一个针对 `char` 类型的 `swap` 函数的全特化:
```c++
template <>
void swap<char>(char& a, char& b) {
char temp = a;
a = b;
b = temp;
std::cout << "Swapping chars!" << std::endl;
}
```
上述代码中,我们使用了 `template<>` 关键字显示地声明了一个全特化函数,指定了模板参数为 `char`。
当我们调用 `swap` 函数,并将 `char` 类型的变量作为参数传递时,编译器将自动选择调用这个全特化版本的函数。
需要注意的是,全特化版本的函数应该在头文件中进行声明和定义,以便编译器能够正确地实例化这些函数。
阅读全文