在C ++中键入一个枚举值

时间:2011-06-13 19:18:03

标签: c++ typedef enumerated-types

我有一个基类,它具有我在派生类中使用的枚举值。基类是Table<>,派生类是Matrix<>。现在,Table<>中的枚举值为TABLE_SIZE,用于Matrix<>类。由于TABLE_SIZE在矩阵类中没有多大意义(它确实有点!),我想我会把它定义为与Matrix<>MATRIX_SIZE)更一致的东西。< / p>

typedef TABLE_SIZE MATRIX_SIZE;

这不起作用,这有点令人惊讶。我猜我不能输入定义值,因为枚举是一个类型而不是值(不确定这是否是正确的观察)?所以,现在的问题是,我怎么做/我可以完成上述工作?

编辑:有一件事我忘了提到我不希望Matrix类的大小增加(是的,我意识到这是一个小小的增加,对大多数人来说无关紧要,我的情况,确实如此)。

4 个答案:

答案 0 :(得分:6)

您可以定义枚举: 枚举{MATRIX_SIZE = TABLE_SIZE};

答案 1 :(得分:5)

typedef用于类型,而不是值。使用

static const size_t MATRIX_SIZE = TABLE_SIZE;

(假设此处size_t是正确的类型。)

更好的是,只需将TABLE_SIZE重命名为SIZEsize;因为它是一个成员,所以很难与你程序中的任何其他size混淆。

答案 2 :(得分:2)

我将在这里采取不同的策略。

  

由于TABLE_SIZE在矩阵类中没有多大意义(它确实有点!),

修辞问题:如果没有意义,你为什么要这样做?答案是,您需要将Matrix与基表的大小相同。那为什么要隐瞒事实?要明确。不要模糊矩阵大小和表格大小是一样的事实。考虑一下可怜的未来维护者(可能是你),他必须通过额外的间接水平(可能没有评论为什么)。

您不仅应该明确表示,您有意使矩阵大小与基础表大小相同,这是一个值得评论的设计决策。

总是编程好像未来的维护者是一个知道你住在哪里的杀人狂。

答案 3 :(得分:0)

typedef是声明类型别名的关键字,但TABLE_SIZE不是类型。

您可以使用预处理器:

#define MATRIX_SIZE TABLE_SIZE

(等待未经证实的“宏是邪恶的!”声称。继续,我敢。)