【C++】掌握类模板:多参数实战技巧
1. 类模板
1.1 类模板的定义格式
template<class T1, class T2, ..., class Tn>
class 类模板名
{
// 类内成员定义
};
多参数类模板的示例化与使用规则:
实例化格式:
类模板名<类型1, 类型2, ..., 类型n> 变量名(构造参数);
使用要点:
必须为每个模板参数显式指定具体类型(除非有默认参数)
模板参数之间用逗号分隔,整体用尖括号
<>
包裹类内部可以使用这些模板参数定义成员变量、函数参数或返回值类型
示例:
template<class KeyType, class ValueType> // 两个模板参数:键类型和值类型
class MyPair { ... }
这里KeyType
和ValueType
是类型占位符,使用时需替换为具体类型。
实例化方式:
MyPair<int, std::string>
:指定键为int
类型,值为string
类型
MyPair<std::string, double>
:指定键为string
类型,值为double
类型
每个实例化都会生成一个独立的类(如
MyPair<int, string>
和MyPair<string, double>
是两个不同的类)
// 动态顺序表
// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具
template<class T>
class Vector
{
public : Vector(size_t capacity = 10) : _pData(new T[capacity]) , _size(0) , _capacity(capacity) {} // 使用析构函数演示:在类中声明,在类外定义。 ~Vector(); void PushBack(const T& data); void PopBack(); // ... size_t Size() {return _size;} T& operator[](size_t pos{ assert(pos < _size); return _pData[pos]; } private: T* _pData; size_t _size; size_t _capacity;
};
// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表
template <class T>
Vector<T>::~Vector()
{ if(_pData) delete[] _pData; _size = _capacity = 0;
}
1.2 类模板的实例化
类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>
中即可,类模板名字不是真正的类,而实例化的结果才是真正的类
// Vector类名,Vector<int>才是类型
Vector<int> s1;
Vector<double> s2;