C++中的函数模板是一种通过泛型编程实现代码重用的方式。它允许我们编写一种通用的函数,可以在不同的数据类型上进行操作。在C++中,有许多不同类型的函数模板,每个模板都有其特定的用途和应用场景。

1. 函数模板

函数模板是最常见和最基本的函数模板类型。它允许我们编写一种通用的函数,可以用于不同的数据类型。函数模板的语法如下:

template <class T>
T add(T a, T b) {
    return a + b;
}

以上代码定义了一个add函数模板,可以用于不同类型的数据,比如int、float等。在函数模板中,我们使用了模板参数T来表示通用的数据类型。当我们调用函数模板时,编译器会根据实际的参数类型推断出T的具体类型。

2. 类模板

类模板是一种可以在不同数据类型上实例化的模板,它允许我们编写一种通用的类,可以具有不同的成员变量和成员函数。类模板的语法如下:

template <class T>
class Stack {
private:
    T* elements;
    int size;
public:
    Stack(int capacity);
    void push(T element);
    T pop();
    bool isEmpty();
};

以上代码定义了一个Stack类模板,可以用于不同类型的数据,比如int、float等。在类模板中,我们使用了模板参数T来表示通用的数据类型。当我们实例化类模板时,需要指定T的具体类型。

3. 成员函数模板

成员函数模板是一种在类中定义的函数模板,它可以用于不同数据类型的成员函数。成员函数模板的语法如下:

class Array {
private:
    T* elements;
    int size;
public:
    template <class T>
    void resize(int newSize) {
        T* newElements = new T[newSize];
        // 实现数组resize的逻辑
    }
};

以上代码定义了一个Array类,并在其中定义了一个成员函数模板resize。在成员函数模板中,我们同样使用了模板参数T来表示通用的数据类型。当我们调用类的成员函数模板时,编译器会根据实际的参数类型推断出T的具体类型。

总结起来,C++中常用的函数模板类型有函数模板、类模板和成员函数模板。这些模板允许我们编写通用的代码,可以在不同的数据类型上进行操作。通过函数模板,我们可以实现对不同数据类型的统一处理,提高代码的复用性和灵活性。