enum がどのように機能するかを理解するために、C++ 標準を少し読んでみました。当初考えていたよりも実際にはたくさんあります。
スコープ付き列挙のint
場合、enum-base 句で特に指定しない限り、基になる型が であることは明らかです (任意の整数型にすることができます)。
enum class color { red, green, blue}; // these are int
スコープのない列挙の場合、基になる型は機能する任意の整数型にすることができ、必要な場合を除き、int よりも大きくならないようです。
enum color { red, green, blue}; // underlying type may vary
基になるスコープのない列挙型は標準化されていないため、インスタンスのシリアル化を処理する最良の方法は何ですか? これまでのところ、int
書き込み時に に変換してから にシリアル化し、読み取り時に変数をスイッチにint
設定してenum
いましたが、少しぎこちないようです。より良い方法はありますか?
enum color { red, green, blue };
color c = red;
// to serialize
archive << (int)c;
// to deserialize
int i;
archive >> i;
switch(i) {
case 0: c = red; break;
case 1: c = green; break;
case 2: c = blue; break;
}