模板(Template)是C++中的一种泛型编程工具,它允许编写通用的代码,可以适用于多种数据类型。使用模板可以在不同类型之间共享相同的代码结构,避免了为每种类型编写重复的代码。

C++中有两种类型的模板:函数模板(Function Template)和类模板(Class Template)。

  1. 函数模板(Function Template): 函数模板允许定义通用的函数,该函数可以根据实际参数的类型进行实例化。函数模板使用template关键字定义,并使用一个或多个类型参数表示待定的类型。

函数模板的语法如下:

template <typename T>
返回类型 函数名(参数列表) {
    // 函数模板的实现
}

在函数模板中,typename关键字可以用class关键字替代,两者在大多数情况下是等效的。T是类型参数,可以根据实际需求命名。

下面是一个函数模板的示例,用于计算两个数的最大值:

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

int main() {
    int maxInt = Max(5, 10); // 实例化函数模板,类型参数为int
    double maxDouble = Max(3.14, 2.71); // 实例化函数模板,类型参数为double

    return 0;
}
  1. 类模板(Class Template): 类模板允许定义通用的类,可以根据实际类型进行实例化。类模板使用template关键字定义,并使用一个或多个类型参数表示待定的类型。

类模板的语法如下:

template <typename T>
class 类名 {
    // 类模板的成员和实现
};

类模板中的成员函数和成员变量可以使用类型参数T,并在实例化时根据实际类型进行替换。

下面是一个类模板的示例,用于表示一个通用的栈(Stack)数据结构:

template <typename T>
class Stack {
private:
    T* stackArray;
    int top;
    int capacity;

public:
    Stack(int size) : capacity(size) {
        stackArray = new T[capacity];
        top = -1;
    }

    void Push(T element) {
        if (top < capacity - 1) {
            stackArray[++top] = element;
        }
    }

    T Pop() {
        if (top >= 0) {
            return stackArray[top--];
        }
    }
};

int main() {
    Stack<int> intStack(10); // 实例化类模板,类型参数为int
    intStack.Push(5);
    intStack.Push(10);
    int val = intStack.Pop(); // 弹出栈顶元素

    Stack<double> doubleStack(5); // 实例化类模板,类型参数为double
    doubleStack.Push(3.14);
    doubleStack.Push(2.71);
    double val2

 = doubleStack.Pop(); // 弹出栈顶元素

    return 0;
}

在实例化类模板时,需要指定类型参数,用具体的类型替代T

函数模板和类模板都可以有多个类型参数,以支持更多的灵活性。在使用模板时,编译器会根据实际的参数类型生成对应的函数或类的实例化代码,实现类型安全和代码重用。

分类: C/C++

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

友情链接:Ctips' blog, Colza’s blog

站点状态:Status