Хрюканье является инструментом, созданным сверху фронтенда C++ Elsa. Свинина Mozilla является ветвлением Elsa/Oink.
Нет, нет.
enum
действительно плохая вещь в C ++, и это, конечно, прискорбно.
Даже класс enum
введенный в C ++ 0x не решает эту проблему расширяемости (хотя они делают некоторые вещи, по крайней мере, для безопасности типов).
Единственное преимущество enum
состоит в том, что они не существуют: они предлагают некоторый тип безопасность, не вызывая при этом дополнительных затрат времени выполнения, поскольку они заменяются непосредственно компилятором.
Если вам нужен такой зверь, вам придется работать самостоятельно:
MyEnum
, содержащий int (в основном) , теперь вы можете расширять свой класс (добавляя именованные конструкторы) по желанию ...
Это обходной путь,Я никогда не находил удовлетворительного способа работы с перечислением ...
Если бы вы смогли создать подкласс перечисления, пришлось бы работать наоборот.
Набор экземпляров в подклассе - это подмножество экземпляров в суперклассе. Подумайте о стандартном примере «Форма». Класс Shape представляет набор всех фигур. Класс Circle, его подкласс, представляет подмножество фигур, которые являются кругами.
Таким образом, чтобы быть согласованным, подкласс перечисления должен содержать подмножество элементов перечисления, от которого он наследуется.
(И нет, C ++ не поддерживает это.)
Следующий код работает хорошо.
enum Enum {A,B,C};
enum EnumEx {D=C+1,E,F};