类模板 QueueItem 的声明:
template <class T>
class QueueItem;
一个类模板可以有多个类型参数
template <class T1, class T2, class T3>
class QueueItem;
模板参数名不能被用作在类模板定义中声明的类成员的名字:
template <class Type>
class QueueItem {
public:
// ...
private:
// 错误: 成员名不能与模板参数 Type 同名
typedef double Type;
Type item;
QueueItem *next;
};
模板参数的名字在模板参数表中只能被引入一次例如下面语句将被标记为编译时刻:
错误
// 错误: 重复使用名为Type 的模板参数
template <class Type, class Type>
class container;
在不同的类模板声明或定义之间模板参数的名字可以被重复使用:
// ok: 名字 'Type' 在不同模板之间可被重复使用
template <class Type>
class QueueItem;
template <class Type>
class Queue;
在类模板的前向声明和类模板定义中模板参数的名字可以不同例如下面三个:
QueueItem 都引用同一个类模板
// 所有三个 QueueItem 声明都引用同一个类模板
// 模板的声明
template <class T> class QueueItem;
template <class U> class QueueItem;
// 模板的真正定义
template <class Type>
class QueueItem { ... };
template <class T>
class QueueItem;
一个类模板可以有多个类型参数
template <class T1, class T2, class T3>
class QueueItem;
模板参数名不能被用作在类模板定义中声明的类成员的名字:
template <class Type>
class QueueItem {
public:
// ...
private:
// 错误: 成员名不能与模板参数 Type 同名
typedef double Type;
Type item;
QueueItem *next;
};
模板参数的名字在模板参数表中只能被引入一次例如下面语句将被标记为编译时刻:
错误
// 错误: 重复使用名为Type 的模板参数
template <class Type, class Type>
class container;
在不同的类模板声明或定义之间模板参数的名字可以被重复使用:
// ok: 名字 'Type' 在不同模板之间可被重复使用
template <class Type>
class QueueItem;
template <class Type>
class Queue;
在类模板的前向声明和类模板定义中模板参数的名字可以不同例如下面三个:
QueueItem 都引用同一个类模板
// 所有三个 QueueItem 声明都引用同一个类模板
// 模板的声明
template <class T> class QueueItem;
template <class U> class QueueItem;
// 模板的真正定义
template <class Type>
class QueueItem { ... };