Расширение перечислений в C++?

Хрюканье является инструментом, созданным сверху фронтенда C++ Elsa. Свинина Mozilla является ветвлением Elsa/Oink.

См.: http://danielwilkerson.com/oink/index.html

68
задан cvb 26 November 2009 в 17:11
поделиться

3 ответа

Нет, нет.

enum действительно плохая вещь в C ++, и это, конечно, прискорбно.

Даже класс enum введенный в C ++ 0x не решает эту проблему расширяемости (хотя они делают некоторые вещи, по крайней мере, для безопасности типов).

Единственное преимущество enum состоит в том, что они не существуют: они предлагают некоторый тип безопасность, не вызывая при этом дополнительных затрат времени выполнения, поскольку они заменяются непосредственно компилятором.

Если вам нужен такой зверь, вам придется работать самостоятельно:

  • создайте класс MyEnum , содержащий int (в основном)
  • создать именованные конструкторы для каждого из интересных значений

, теперь вы можете расширять свой класс (добавляя именованные конструкторы) по желанию ...

Это обходной путь,Я никогда не находил удовлетворительного способа работы с перечислением ...

61
ответ дан 24 November 2019 в 14:21
поделиться

Если бы вы смогли создать подкласс перечисления, пришлось бы работать наоборот.

Набор экземпляров в подклассе - это подмножество экземпляров в суперклассе. Подумайте о стандартном примере «Форма». Класс Shape представляет набор всех фигур. Класс Circle, его подкласс, представляет подмножество фигур, которые являются кругами.

Таким образом, чтобы быть согласованным, подкласс перечисления должен содержать подмножество элементов перечисления, от которого он наследуется.

(И нет, C ++ не поддерживает это.)

7
ответ дан 24 November 2019 в 14:21
поделиться

Следующий код работает хорошо.

enum Enum {A,B,C};
enum EnumEx {D=C+1,E,F};
-3
ответ дан 24 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: