c++模板知识点 (c++基本模板)

C++ 类模板是一种用来生成类定义的模板,可以根据模板参数的不同生成不同的类。

我们需要知道 类模板和成员函数模板不是类和成员函数定义,它们是C++编译器指令,说明了如何生成类和成员函数定义。

所以使用类模板可以方便地定义通用的类,以便适用于不同类型的数据。例如,我们可以使用类模板来定义一个通用的栈类,可以存储任意类型的数据。

类模板的定义通常以关键字 template 开头,后跟模板参数列表,然后是类定义。模板参数列表是一个用逗号分隔的参数列表,每个参数可以是类型、非类型参数或模板参数包。

// 可以使用class 代替 typename
template <typename Type> 	

以下是一个简单的类模板示例,用来实现一个通用的栈类:

// 以 template <typename T> 开头
template <typename T>
class Stack {
public:
    Stack();
    void push(const T& data);
    T pop();
private:
    vector<T> data_;
};

// 以 template <typename T> 开头
template <typename T>
Stack<T>::Stack() {}					// 将类限定符从Stack::改为Stack<Type>::

// 以 template <typename T> 开头
template <typename T>
void Stack<T>::push(const T& data) {	// 将类限定符从Stack::改为Stack<Type>::
    data_.push_back(data);
}

// 以 template <typename T> 开头
template <typename T>
T Stack<T>::pop() {						// 将类限定符从Stack::改为Stack<Type>::
    T data = data_.back();
    data_.pop_back();
    return data;
}

在实际使用时,我们可以使用任何类型来实例化这个类模板。例如,下面的代码定义了一个存储 int 类型的栈:

// 使用具体的类型代替 T,可以是任意类型。这里使用的int类型
Stack<int> int_stack;
int_stack.push(1);
int_stack.push(2);
int_stack.push(3);
std::cout << int_stack.pop() << std::endl; // 输出 3