模板作用域中的模板类型的引用

         通常,当使用类模板的名字时候,必须指定模板形参。这一规则有个例外:在类本身的作用域内部可以使用类模板的非限定名。例如:在默认构造函数和复制构造函数的声明中,名字Queue是Queue<Type>的缩写表示。实质上,编译器推断,当我们引用类的名字时,引用的是同一版本。因此,复制构造函数定义其实等价于:

Queue<Type>(const Queue<Type>& Q):head(0),tail(0)

                 {copy_elems(Q); }

编译器不会为类中使用的其他模板的模板形参进行这样的推断,因此,在声明伙伴类QueueItem的指针时,必须指定类型形参:

Queue<Type>* head;       //pointer to first element in Queue

Queue<Type>* tail;           //pointer to last element in Queue

这些声明指出,对于Queue类的给定实例化,head和tail指向为同一模板形参实例化的QueueItem类型的对象,即,在Queue<int>实例化的内部,head和tail的类型是QueueItem<int>*。

你可能感兴趣的:(模板作用域中的模板类型的引用)