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