固定大小的列表

Fixed size list

本文关键字:列表      更新时间:2023-10-16

我正在使用固定数组编写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作为一个指针并在堆栈上分配吗?

谢谢。

要编译它,请更改

Node m_data[N];

Node<T> m_data[N];

因为Node毕竟是一个模板类

也就是说,简单地执行Oli所说的并从Node的定义中删除template <typename T>也可以工作,因为T是从FixedSizeList实例化中已知的。我建议这样做,因为Node的类型不能与FixedSizeList的类型不同。

虽然,这个答案是如此明显,我怀疑我在回答你的问题。如果我错过了什么,告诉我。

list根据定义是可变大小的容器。为什么不直接使用数组类呢?

很难说这是否是一个好的解决方案,但从表面上看,它看起来不错(尽管存在编译器错误)。虽然我不太确定为什么你想要一个固定大小的列表;列表的全部意义不就是你可以动态地调整它的大小吗?为什么不只是一个数组/向量?

至于你的编译问题,你不需要内部类的template <typename T>;这已经是模板的一部分,并且T是已知的。此外,您没有Node的默认构造函数,因此Node m_data[N]将无法编译。