我有一个基类,它具有我在派生类中使用的枚举值。基类是Table<>
,派生类是Matrix<>
。现在,Table<>
中的枚举值为TABLE_SIZE
,用于Matrix<>
类。由于TABLE_SIZE
在矩阵类中没有多大意义(它确实有点!),我想我会把它定义为与Matrix<>
(MATRIX_SIZE
)更一致的东西。< / p>
typedef TABLE_SIZE MATRIX_SIZE;
这不起作用,这有点令人惊讶。我猜我不能输入定义值,因为枚举是一个类型而不是值(不确定这是否是正确的观察)?所以,现在的问题是,我怎么做/我可以完成上述工作?
编辑:有一件事我忘了提到我不希望Matrix类的大小增加(是的,我意识到这是一个小小的增加,对大多数人来说无关紧要,我的情况,确实如此)。
答案 0 :(得分:6)
您可以定义枚举: 枚举{MATRIX_SIZE = TABLE_SIZE};
答案 1 :(得分:5)
typedef
用于类型,而不是值。使用
static const size_t MATRIX_SIZE = TABLE_SIZE;
(假设此处size_t
是正确的类型。)
更好的是,只需将TABLE_SIZE
重命名为SIZE
或size
;因为它是一个成员,所以很难与你程序中的任何其他size
混淆。
答案 2 :(得分:2)
我将在这里采取不同的策略。
由于TABLE_SIZE在矩阵类中没有多大意义(它确实有点!),
修辞问题:如果没有意义,你为什么要这样做?答案是,您需要将Matrix与基表的大小相同。那为什么要隐瞒事实?要明确。不要模糊矩阵大小和表格大小是一样的事实。考虑一下可怜的未来维护者(可能是你),他必须通过额外的间接水平(可能没有评论为什么)。
您不仅应该明确表示,您有意使矩阵大小与基础表大小相同,这是一个值得评论的设计决策。
总是编程好像未来的维护者是一个知道你住在哪里的杀人狂。
答案 3 :(得分:0)
typedef
是声明类型别名的关键字,但TABLE_SIZE
不是类型。
您可以使用预处理器:
#define MATRIX_SIZE TABLE_SIZE
(等待未经证实的“宏是邪恶的!”声称。继续,我敢。)