假设我有一个类模板如下
template <class t>
class Node{
T data;
Node<T>* nxt;
}
我的问题是,当我们想要一个指向课程Node
的指针时,为什么我们不能使用Node* nxt
?Node*<T> nxt
和Node* nxt
之间有什么区别?
答案 0 :(得分:2)
实际上,在类模板定义中编写Node* nxt
是有效的,它与Node<T>* nxt
具有相同的含义。通常,在包含模板参数C
,T1
,...等的类模板T2
的定义中,您只需编写C
即可。到C<T1, T2, ...>
。试试吧,它会编译。 (更准确地说,类型Node
的行为就像在类中声明为嵌套类型一样。)
外部类定义(以及任何成员函数定义),您必须提供模板参数,而不是仅仅自己编写Node
,因为名称Node
表示一个模板,而不是一个类;类模板不是类型,但通过使用模板参数实例化类模板获得的类是一种类型。
答案 1 :(得分:1)
Node*<T> nxt
和Node* nxt
之间有什么区别?
没有这种称为Node
的类型。 Node<T>
将是一种类型,而Node
是一个模板(不是类型),您可以从中创建更多类型。因此,你可以指向Node<T>
而不是Node
的指针;因此Node<T>*
有效且Node*
无效。
我的问题是我们想要一个指向类
的指针Node
您不希望指向模板类Node
的指针,而是某些特定类型的指针,例如Node<int>
。另请注意,Node<int>
和Node<float>
是完全不同的类型,类似于Animal
和Pencil
类型的不同。
为什么我们不能使用
Node* nxt
因为您无法指向非类型实体。它是一个模板,而不是一个类型。