函数定义中的C ++ typename

时间:2013-08-08 15:43:59

标签: c++ typename

这段代码如果来自链接列表的示例但是我很难理解这个函数的第二行,有人可以通过它来讨论我吗?

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;
}    

3 个答案:

答案 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。)。其余的代码只是迭代我们的列表元素,直到找到并返回包含被搜索数据的节点。