一、类模板简介
类模板提供了定义泛型类的方法,使得类能够处理不同的数据类型。这增强了代码的复用性和灵活性。
1.1 基本定义
类模板使用template关键字定义,后跟模板参数列表。这些参数可以使用typename或class关键字声明。
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | template <typename T1, typename T2>class MyPair {
 public:
 T1 getFirst();
 T2 getSecond();
 private:
 T1 first;
 T2 second;
 };
 
 | 
1.2 成员函数实现
类外成员函数实现需要前置模板参数声明:
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | template<typename T1, typename T2>T1 MyPair<T1, T2>::getFirst() {
 return first;
 }
 
 template<typename T1, typename T2>
 T2 MyPair<T1, T2>::getSecond() {
 return second;
 }
 
 | 
注意:
- 成员函数定义前需要重申模板参数。
- 使用MyPair<T1, T2>来指定函数所属的类模板。
二、Member Types
模板类型中的成员类型(例如迭代器)提供了访问依赖类型的标准方法。
2.1 语法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | template<typename ValueType>class RealVector {
 public:
 using iterator = ValueType*;
 using const_iterator = const ValueType*;
 iterator begin();
 const_iterator cbegin() const;
 iterator end();
 const_iterator cend() const;
 private:
 ValueType* elems;
 size_t size;
 };
 
 | 
2.2 接口实现
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | template<typename ValueType>typename RealVector<ValueType>::iterator RealVector<ValueType>::begin() {
 return elems;
 }
 
 template<typename ValueType>
 typename RealVector<ValueType>::const_iterator RealVector<ValueType>::cbegin() const {
 return elems;
 }
 
 template<typename ValueType>
 typename RealVector<ValueType>::iterator RealVector<ValueType>::end() {
 return elems + size;
 }
 
 template<typename ValueType>
 typename RealVector<ValueType>::const_iterator RealVector<ValueType>::cend() const {
 return elems + size;
 }
 
 | 
注意:
- 成员类型定义在类命名空间内。
- 使用typename明确模板参数类型中的嵌套类型。
三、模板类头文件与源文件编写
为确保模板类正常编译,源文件内容应包含在头文件内。
原因:模板在实例化前不生成代码,因此需要将实现(.cpp)包含在头文件(.h)中。
例如:
realvector.h
| 12
 3
 4
 5
 6
 7
 8
 
 | #ifndef REALVECTOR_H#define REALVECTOR_H
 template<typename ValueType>
 class RealVector {
 
 };
 #include "realvector.cpp"
 #endif
 
 | 
四、示例代码
点击下载示例代码