2

重複の可能性:
ランダムな列挙型の生成

私が次のものを持っているとしましょう:

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.

3ifステートメントを含まないより良い方法を知っているかどうか教えてください。ありがとう。

4

2 に答える 2

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、将来のある時点で色を追加または削除してもコードは機能し、コードを読んでいる人が頭をかいて文字通りの定数3がどこから来たのか不思議に思う必要はありません。

于 2012-06-06T08:24:47.753 に答える
1

必要なのはキャストだけです。

foo = (Color) (rand() % 3);
于 2012-06-06T08:25:21.200 に答える