我一直在尝试阅读一些 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;
}