我正在使用固定数组编写FixedSizeList类。我的固定大小模板参数有问题,我试着理解我的解决方案是否正确,甚至我如何解决我的问题。
基本上,这是我班级的骨架:
#pragma once
template <typename T, unsigned int N>
class SListFixed
{
public:
SListFixed();
private:
template <typename T>
struct Node
{
Node(T value)
:element(value), nextElement(0)
{
}
T element;
int nextElement;
};
Node m_data[N];
int m_head;
int m_tail;
size_t m_elementCounter;
};
第一个问题是关于这种结构的正确性。然后我想了解为什么这段代码不能编译。我应该将m_data作为指针并在堆栈上分配吗?
感谢。
答案 0 :(得分:2)
要进行编译,请更改
Node m_data[N];
到
Node<T> m_data[N];
因为Node
毕竟是模板类。
也就是说,简单地执行Oli所说的并从template <typename T>
的定义中删除Node
也会有效,因为T
实例化中已知FixedSizeList
。我建议这样做,因为Node
的类型不能与FixedSizeList
的类型不同。
尽管如此,这个答案是如此明显,我怀疑我是在回答你的问题。告诉我,如果我错过了什么。
答案 1 :(得分:0)
很难准确地说这是否是一个很好的解决方案,但从表面上看,它看起来还不错(尽管编译错误)。虽然我不太清楚为什么你想要一个固定大小的列表;是不是可以动态调整大小的列表的全部内容?为什么不只是一个数组/向量?
至于编译问题,内部类不需要template <typename T>
;这已经是模板的一部分了,T
已经知道了。此外,您没有Node
的默认构造函数,因此Node m_data[N]
将无法编译。
答案 2 :(得分:0)
根据定义,列表是可变大小的容器。你为什么不简单地使用array类?