📜  c++ 模板 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:49.245000             🧑  作者: Mango

C++ 模板 - C++

什么是 C++ 模板?

C++ 模板是一种通用编程工具,它使程序员可以编写可以适应多种类型或值的代码。使用模板可以避免在编写重复的代码时重复编写多个函数或类的情况。模板是 C++ 中的泛型编程的关键组成部分,它提供了一种强大的抽象工具。

C++ 模板提供了两种类型的模板:类模板和函数模板。

类模板 (Class Templates)

类模板允许我们定义一个通用的类,可以根据不同的类型创建特定的实例。我们可以通过在类模板中使用类型参数来实现这一点。

下面是一个示例,展示了如何定义和使用一个简单的类模板:

template <typename T>
class MyStack {
private:
    T stack[100];
    int top;
public:
    MyStack() {
        top = -1;
    }
    void push(T element) {
        stack[++top] = element;
    }
    T pop() {
        return stack[top--];
    }
    T peek() {
        return stack[top];
    }
};

在上述代码中,MyStack 是一个通用的堆栈类模板。它使用类型参数 T 来表示堆栈中元素的类型。我们可以使用 MyStack 类来创建适用于不同类型的堆栈实例。

以下是一个使用 MyStack 类模板的示例:

MyStack<int> intStack;
intStack.push(10);
intStack.push(20);
intStack.push(30);
cout << intStack.pop();  // 输出 30
函数模板 (Function Templates)

函数模板允许我们定义一个通用的函数,可以接受不同类型的参数。在函数模板中,我们可以使用类型参数和函数参数进行通用化。

下面是一个示例,展示了如何定义和使用一个简单的函数模板:

template <typename T>
T getMax(T a, T b) {
    return (a > b) ? a : b;
}

在上述代码中,getMax 是一个可以比较两个值并返回较大值的通用函数模板。它使用类型参数 T 来通用化输入参数和返回类型。

以下是一个使用 getMax 函数模板的示例:

int maxInt = getMax<int>(10, 20);  // 返回 20
double maxDouble = getMax<double>(3.14, 2.5);  // 返回 3.14
模板特化 (Template Specialization)

模板特化允许我们为特定的类型或值提供特定的实现。模板特化可以在某些情况下覆盖通用模板或提供更具体的实现。

以下是一个示例,展示了如何为特定类型的类模板提供特殊实现:

template <>
class MyStack<char> {
private:
    char stack[100];
    int top;
public:
    MyStack() {
        top = -1;
    }
    void push(char element) {
        stack[++top] = element;
    }
    char pop() {
        return stack[top--];
    }
    char peek() {
        return stack[top];
    }
};

在上述代码中,我们为 MyStack<char> 类特化了一个新的实现,使用字符数组代替了模板中的通用数组。

总结

C++ 模板提供了一种强大的泛型编程工具,允许我们编写可以适应多种类型或值的代码。类模板和函数模板可以更轻松地编写灵活和可重用的代码。同时,模板特化使我们可以针对特定的类型或值提供特殊的实现。

通过合理地使用 C++ 模板,程序员可以提高代码的可读性、可维护性和灵活性。