Введите значение перечисления в C ++ - PullRequest
1 голос
/ 13 июня 2011

У меня есть базовый класс со значением enum, которое я использую в производном классе.Базовый класс - Table<>, а производный класс - Matrix<>.Теперь значение enum в Table<> равно TABLE_SIZE, которое используется в классе Matrix<>.Поскольку TABLE_SIZE не имеет большого смысла (он имеет мало смысла!) В матричном классе, я подумал, что я бы определил его как-то более совместимый с Matrix<> (MATRIX_SIZE).

typedef TABLE_SIZE MATRIX_SIZE;

Это не сработало, что было немного удивительно.Я предполагаю, что не могу набрать определение значения, потому что перечисление является типом, а не значениями (не уверен, что это правильное наблюдение)?Итак, теперь вопрос в том, как-я / могу-я выполнить вышеуказанное?

РЕДАКТИРОВАТЬ: Одна вещь, которую я забыл упомянуть, это то, что я не хочу, чтобы класс Matrixувеличение в размере (да, я понимаю, что это небольшое увеличение, и оно не имеет значения для большинства людей, в моем случае это имеет значение).

Ответы [ 4 ]

6 голосов
/ 13 июня 2011

Вы можете определить перечисление: enum {MATRIX_SIZE = TABLE_SIZE};

5 голосов
/ 13 июня 2011

typedef для типов, а не значений. Используйте

static const size_t MATRIX_SIZE = TABLE_SIZE;

(Предполагается, что size_t является правильным типом здесь.)

Еще лучше, просто переименуйте TABLE_SIZE в SIZE или size; поскольку это член, его вряд ли можно спутать с другими size в вашей программе.

2 голосов
/ 14 июня 2011

Я собираюсь взять другую тактику здесь.

Поскольку TABLE_SIZE не имеет большого смысла (это мало!) В матричном классе,

Риторический вопрос: если это не имеет смысла, зачем ты это делаешь? Ответ заключается в том, что по какой-то причине ваша матрица должна иметь такой же размер, как и базовая таблица. Так зачем скрывать факт? Будь явным Не заслоняйте тот факт, что размер матрицы и размер таблицы совпадают. Подумайте о бедном будущем сопровождающем (вероятно, о вас), который должен пройти через этот дополнительный уровень косвенности (вероятно, без комментариев относительно причины).

Мало того, что вы должны явно указать, что вы намеренно делаете размер матрицы таким же, как и размер базовой таблицы, это дизайнерское решение, заслуживающее комментариев.

Всегда программируйте так, как будто будущий сопровождающий - маньяк-убийца, который знает, где вы живете.

0 голосов
/ 13 июня 2011

typedef - ключевое слово для объявления псевдонима типа , но TABLE_SIZE не является типом.

Вы можете использовать препроцессор:

#define MATRIX_SIZE TABLE_SIZE

(В ожидании необоснованных претензий "Макрос - это зло!". Продолжайте, я смею вас.)

...