C++的template

19 阅读2分钟

在C++中,模板(Template)是一种用来生成通用代码的工具,它允许编写通用的函数或类,以便在编译时根据具体的类型生成特定版本的代码。

模板使得编写可重用的代码变得更加容易,并且可以帮助减少代码的重复。使用模板可以实现类型参数化,使得函数或类可以与不同类型的数据一起工作,而无需为每种类型编写单独的代码。

模板有两种主要形式:函数模板和类模板。

  1. 函数模板:函数模板允许定义一个通用的函数,其中一些或全部参数的类型是模板参数。当调用函数时,编译器根据传递给函数的实际参数类型来生成特定版本的函数。函数模板通常使用 template <typename T>template <class T> 开头来声明模板参数。

  2. 类模板:类模板允许定义一个通用的类,其中某些成员的类型是模板参数。当实例化类模板时,编译器根据指定的模板参数生成特定版本的类。类模板通常使用 template <typename T>template <class T> 开头来声明模板参数。

以下是一个简单的函数模板示例,演示了如何编写一个通用的交换函数:

#include <iostream>

// 函数模板:交换两个值
template<typename T>
void swap(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 10, y = 20;
    std::cout << "Before swapping: x = " << x << ", y = " << y << std::endl;
    swap(x, y); // 调用函数模板
    std::cout << "After swapping: x = " << x << ", y = " << y << std::endl;

    double a = 3.14, b = 6.28;
    std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;
    swap(a, b); // 调用函数模板
    std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;

    return 0;
}

在这个示例中,swap 函数模板使用了模板参数 typename T,它可以代表任意类型。在 main 函数中,我们分别调用了 swap 函数模板来交换两个整数和两个双精度浮点数的值。编译器根据传递给函数的参数类型来生成特定版本的 swap 函数。