可能重复:
generating random enums
假设我有以下内容:
enum Color {
RED, GREEN, BLUE
};
Color foo;
我想要做的是将foo随机分配给一种颜色。最直接的方式是:
int r = rand() % 3;
if (r == 0)
{
foo = RED;
}
else if (r == 1)
{
foo = GREEN;
}
else
{
foo = BLUE;
}
我想知道是否有更清洁的方法。我尝试了(并且失败了)以下内容:
foo = rand() % 3; //Compiler doesn't like this because foo should be a Color not an int
foo = Color[rand() % 3] //I thought this was worth a shot. Clearly didn't work.
如果你们知道任何更好的方式不涉及3 if语句,请告诉我。感谢。
答案 0 :(得分:7)
您可以将int转换为枚举,例如
Color foo = static_cast<Color>(rand() % 3);
作为一种风格问题,您可能希望使代码更加健壮/可读,例如。
enum Color {
RED,
GREEN,
BLUE,
NUM_COLORS
};
Color foo = static_cast<Color>(rand() % NUM_COLORS);
这样,如果你在将来某个时候向/ Color
添加或删除颜色代码仍然有效,并且有人在阅读你的代码时不必搔头并想知道文字常量{ {1}}来自。
答案 1 :(得分:1)
你需要的只是演员:
foo = (Color) (rand() % 3);