如何在模板类中使用 CONST 而不是 ENUM

问题描述 投票:0回答:1

所以我正在尝试实现包含静态数组的模板类,并且我想使用 const int size 作为参数,但实现此类的唯一方法是使用枚举技术来创建这样的数组。

template<class T>
class Stack
{
private:
    const int SIZE = 100;
    T data[SIZE];
public:

};


template<class T>
class StackTemplate {
    enum {ssize = 100};
    T stack[ssize];
    int top;
public:
    
};

第一个实现会导致错误,而第二个实现则很好。 有没有可能使用 const int 来实现它?

如果我尝试使用 const int 而不是 enum,则会收到此错误“C2597 非法引用非静态成员 'Stack::SIZE' TheRevision”。

c++ class templates
1个回答
0
投票

编译器暗示了一个解决方案:只需制作

SIZE
static
:

template<class T>
class Stack
{
private:
    static const int SIZE = 100;
    T data[SIZE];
public:

};

更好的是,做到了

static constexpr int SIZE = 100;

或者,也许更好,将

SIZE
作为模板参数:

template<class T, size_t SIZE = 100>
class Stack
{
private:
    T data[SIZE];
public:

};
© www.soinside.com 2019 - 2024. All rights reserved.