Хотя СТГ действительно отвечает на вопрос, он не обращался, как я всегда перечислений. Несмотря на то, что они являются более или менее именами для чисел, я всегда использовал их для определения типов, которые могут иметь только определенные значения.
Если перечисление является частью класса, то, что помогает потребителям четко определить ссылку на перечисление:
class Apple {
enum Variety {
Gala,
GoldenDelicious,
GrannySmith,
Fuji
}
...
};
Тогда потребители могли бы заявить о экземплярах перечисления, передать в качестве параметров, и квалифицировать их при обращении один из типов.
unsigned int GetCountOfApples(Apple::Variety appleVariety);
...
fujiCnt = GetCountOfApples(Apple::Fuji);
Иногда требуется перечисление за пределами класса или двух перечислений в том же классе, и вы можете сделать что-то вроде того, что было Пой. Однако вы не сможете ссылаться на тип перечисления, так что просто назовите его.
namespace Color {
enum ColorEnum {
Blue,
Red,
Black
};
Теперь с помощью перечисления и значения будут работать, как:
Color::ColorEnum firstColor = Color::Blue;
Color::ColorEnum secondColor = Color::Red;
if(firstColor == secondColor)
....
Теперь, если случится быть разные перечислений с тем же именем в них, они всегда будут квалифицированы с какого они типа. Тогда вы можете справиться с вопросом, о котором спрашивает Гамбор.
BananaColorEnum banCol = BananaColor::Yellow;
TomatoColorEnum tomCol = TomatoColor::Yellow;
у вас есть Java опыт я думаю;) – hhafez
:) Да. Java и C#. Infact, это единственная функция, которую я чувствовал уродливым на C++ по сравнению с этими двумя. –
Если вам нужен такой синтаксис, вы могли бы просто создать образец пространства имен {enum {BLAH0, BLAH1}}, а затем просто ссылаться на него как на образец :: BLAH0 – BigSandwich