[英]Error when passing template template parameter with dependent nested parameters types
[英]Passing template parameters to nested structs
我正在尝试添加一个嵌套结构(节点),该结构采用传递给基类(LinkedList)的相同模板参数“ T”。
当我尝试对外部LinkedList类进行模板化时,出现“非模板类LinkedList的显式专业化”错误。 如果不添加,私有节点“ head”和“ tail”将无法识别“ T”
将模板添加到Node类时,出现“ T阴影模板参数的声明”错误。 但是,如果我没有将其显式添加到Node类中,则在结构中根本不会识别出“ T”。
如何声明模板并将其正确地从LinkedList类正确传递给嵌套的私有Node结构?
template<class T>
class LinkedList<T> {
private:
template<typename T>
struct Node {
T value;
Node<T>* next;
Node<T>* previous;
Node<T>(T value, Node<T>* next, Node<T>* previous)
:value(value),
next(next),
previous(previous){}
Node<T>& operator=(const Node<T>&) = delete;
};
Node<T>* head;
Node<T>* tail;
LinkedList& operator=(const LinkedList&) = delete;
public:
LinkedList<T>()
:head(nullptr),
tail(nullptr){}
~LinkedList<T>();
LinkedList& insertTail(T value);
};
失去所有多余的<T>
疯狂,仅使用外部模板参数即可。 这样做是完全合法的:
template<class T>
class LinkedList
{
private:
struct Node {
T value;
Node* next;
Node* previous;
Node(T value, Node* next, Node* previous)
: value(value), next(next), previous(previous)
{}
Node& operator=(const Node&) = delete;
};
Node* head;
Node* tail;
LinkedList& operator=(const LinkedList&) = delete;
public:
LinkedList()
: head(nullptr)
, tail(nullptr)
{}
~LinkedList();
LinkedList& insertTail(T value);
};
相关:我的水晶球告诉我,在实现仅在此处声明的其余功能之前, 您应该阅读此内容 。
祝你好运。
在声明主模板(即非专业化)时,请勿在名称后添加<T>
:
template<class T>
class LinkedList {
Node
不应该是模板; 对于任何特定的T
, LinkedList<T>
应该只具有一种Node
s-那些持有T
的Node
:
struct Node {
T value;
Node* next;
// ...
};
最后,当您在模板定义中写入模板名称时,就暗示了<T>
,因此您无需显式指定它:
LinkedList()
:head(nullptr),
tail(nullptr){}
~LinkedList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.