这段代码如果来自链接列表的示例但是我很难理解这个函数的第二行,有人可以通过它来讨论我吗?
template <typename T>
typename List<T>::Node* List<T>::search(T d)
{
if(!head) return NULL;
Node* cur = head;
while(cur) {
if(cur->data == d) return cur;
cur = cur->next;
}
return NULL;
}
答案 0 :(得分:1)
*type* Node
类模板(或专门化)中某处会有List<>
所以在引用该类型时,必须使用语法typename List<T>::Node
。
Dependant names可以使用typename
关键字消除歧义。
答案 1 :(得分:0)
考虑A<T>::X
。 X可以是一个类型(typedef,struct等),也可以是变量(静态变量)。当您在模板“内部”并使用具有此模式的模板的类型时,如果您的X是类型,则必须通过添加typename
来帮助编译器。
答案 2 :(得分:0)
如果你的意思是你帖子中的第二行,那就说“搜索是一个接受T
类型参数的函数,并返回一个指向特定于链接列表的类型List<T>::Node
的指针
如果你的意思是函数search
本身的第二行,它只是将一个局部变量cur
初始化为一个名为head
的成员变量(这里可能指的是链表数据st。)。其余的代码只是迭代我们的列表元素,直到找到并返回包含被搜索数据的节点。