Хотя sth действительно отвечает на вопрос, в нем не говорится, как я всегда использовал перечисления. Несмотря на то, что они являются просто более или менее именами чисел, я всегда использовал их для определения типов, которые могут иметь только определенные значения.
Если перечисление является частью класса, это помогает потребителям четко определить ссылку на перечисление:
class Apple {
enum Variety {
Gala,
GoldenDelicious,
GrannySmith,
Fuji
}
...
};
Тогда потребители смогут объявить экземпляры перечисления, передать их в качестве параметров и квалифицировать их при обращении к одному из типов.
unsigned int GetCountOfApples( Apple::Variety appleVariety );
...
fujiCnt = GetCountOfApples( Apple::Fuji );
Иногда вам нужно перечисление вне класса или два перечисления в одном классе, и вы можете сделать что-то вроде того, что было у Поя. Вы не сможете ссылаться на тип enum, поэтому просто назовите его.
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;