将模板参数传递给嵌套结构
Passing template parameters to nested structs
我正在尝试添加一个嵌套结构(Node),该结构采用传递到基类(LinkedList)中的相同模板参数"T"。
当我尝试对外部LinkedList类进行模板化时,我会得到一个"非模板类LinkedList的显式专用化"错误。如果我不添加它,私有节点"头"answers"尾"不会识别"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
:的
struct Node {
T value;
Node* next;
// ...
};
最后,当您在模板的定义中写入模板的名称时,<T>
是隐含的,因此您不需要显式指定它:
LinkedList()
:head(nullptr),
tail(nullptr){}
~LinkedList();
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 用C#中的并集模拟C++嵌套结构
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- Lambda 捕获、初始值设定项和嵌套结构
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 重载嵌套结构/类的流插入运算符
- C++将结构传递给函数以访问嵌套结构
- C++ 在外部使用嵌套结构实现类函数
- 嵌套结构,从由空行分隔的文件中读取数据
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- C++中的嵌套结构
- 使用嵌套结构初始化并集
- C++ 中的嵌套结构函数
- C++中匿名类型的嵌套结构
- c++ 嵌套结构映射找不到成员
- C 嵌套结构上的 g++ 编译错误
- 不能使用嵌套结构中的联合元素作为 scanf() 的参数来存储所需的值
- 如何将值添加到嵌套结构中,该结构在C++中有两个指针