1

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

typedef TABLE_SIZE MATRIX_SIZE;

这没有奏效,这有点令人惊讶。我猜我不能 typedef 值,因为枚举是一种类型而不是值(不确定这是否是正确的观察)?所以,现在的问题是,我如何/我可以完成上述任务?

编辑:我忘记提到的一件事是我不希望 Matrix 类增加大小(是的,我意识到这是一个微小的增加,对大多数人来说并不重要,就我而言,确实如此)。

4

4 回答 4

6

你可以定义一个枚举: enum { MATRIX_SIZE = TABLE_SIZE };

于 2011-06-13T19:20:50.873 回答
5

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

static const size_t MATRIX_SIZE = TABLE_SIZE;

(假设size_t这里的类型是正确的。)

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

于 2011-06-13T19:19:45.133 回答
2

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

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

反问:如果没有意义,你为什么要这样做?答案是出于某种原因,您需要矩阵与基表的大小相同。那么为什么要隐瞒事实呢?明确。不要掩盖矩阵大小和表格大小相同的事实。想想可怜的未来维护者(可能是你),他们必须通过额外的间接级别(可能没有评论为什么)。

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

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

于 2011-06-14T07:49:17.900 回答
0

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

您可以使用预处理器:

#define MATRIX_SIZE TABLE_SIZE

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

于 2011-06-13T19:19:54.070 回答