继承 类 之间枚举的最佳做法是什么?

What is the best practice for enums between inherited classes?

我已经阅读了很多帖子(即 Base enum class inheritance),它们展示了如何欺骗编译器扩展派生的 class,以便枚举继续。

我看到的这种方法的问题是,如果您需要在基础 class 中进行新的枚举,这会破坏派生 class 的编号系统。只要您不需要读取保存的文件,这可能就没问题。

但是,如果 class 结构用于序列化文件怎么办?对我来说,这似乎是个问题。处理这种情况的建议最佳做法是什么?

只需给您的值两部分:class它们属于哪个,以及枚举值。像这样:

struct B
{
  enum X { b0, b1, b2, b3 };
};

struct C : B
{
  enum Y { c0, c1 };
};

enum WhichClass { b, c };

现在您可以存储一对:第一个元素是 WhichClass,第二个元素是 X 或 Y。

另一个想法是简单地要求每个 class 有一个值的范围,例如第一个 class 得到 0 到 999,第二个 class 得到 1000 到 1999,等等。你可以像你链接的 post 一样实现这个,但是使用一个显式的,更高的基值class Last 值。