Я пытался прочитать немного стандарта С++, чтобы выяснить, как работает enum. На самом деле там больше, чем я думал.
Для области перечисления в области видимости ясно, что базовый тип 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;
}