固定大小列表

时间:2011-05-01 17:14:05

标签: c++ list templates

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

感谢。

3 个答案:

答案 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类?