将位掩码整数和枚举存储在相同的值中。如何?
Storing bitmask integer and enum in the same value. How?
我有一个带有位掩码整数的旧类型(例如 0x0001、0x0002、0x0004、0x0008、...、0x4000)。我们决定重新设计整个东西,但具有向后兼容性。所以我们将所有内容都移到了一个枚举中,包括所有遗留类型。
想象一下我们在谈论椅子。枚举现在看起来像这样:
enum Chairs
{
OldChair1,
OldChair2,
OldChair3,
NewChair1,
NewChair2
};
我们目前正在将椅子存放在一个文件中。对于旧椅子,它们由位掩码整数存储(例如 1、2、4、8、...、4000)。我们现在正尝试将新椅子存储在同一个文件中,同时保持向后兼容性。
我们不能写枚举的整数值,因为“4”在位掩码整数方面对应于 OldChair3,但在枚举方面对应于 newChair2。由于写入值必须向后兼容,因此它必须对应于 OldChair3.
我们想到了将旧椅子写为位掩码整数,将新椅子写为字符串的想法,使用我可以免费使用的一些 EnumToString 函数。这样,当它是整数时,我们知道它是一把旧椅子,否则就是一把新椅子。
但是,当从文件中读回值时,我没有任何 StringToEnum 可供使用,我也不想创建一个。由于创建 StringToEnum 需要我在多个位置指定可能的枚举值。在不久的将来,除了我自己之外,其他人可能会添加新椅子。
关于这些 old/new 椅子如何以干净的方式 written/read to/from 文件,谁能想出任何巧妙的解决方案?
为新椅子分配不同的值,使它们不会有点掩码:
enum Chairs
{
OldChair1 = 0x00001,
OldChair2 = 0x00002,
OldChair3 = 0x00004,
NewChair1 = 0x80001,
NewChair2 // 0x8002
};
我有一个带有位掩码整数的旧类型(例如 0x0001、0x0002、0x0004、0x0008、...、0x4000)。我们决定重新设计整个东西,但具有向后兼容性。所以我们将所有内容都移到了一个枚举中,包括所有遗留类型。
想象一下我们在谈论椅子。枚举现在看起来像这样:
enum Chairs
{
OldChair1,
OldChair2,
OldChair3,
NewChair1,
NewChair2
};
我们目前正在将椅子存放在一个文件中。对于旧椅子,它们由位掩码整数存储(例如 1、2、4、8、...、4000)。我们现在正尝试将新椅子存储在同一个文件中,同时保持向后兼容性。
我们不能写枚举的整数值,因为“4”在位掩码整数方面对应于 OldChair3,但在枚举方面对应于 newChair2。由于写入值必须向后兼容,因此它必须对应于 OldChair3.
我们想到了将旧椅子写为位掩码整数,将新椅子写为字符串的想法,使用我可以免费使用的一些 EnumToString 函数。这样,当它是整数时,我们知道它是一把旧椅子,否则就是一把新椅子。
但是,当从文件中读回值时,我没有任何 StringToEnum 可供使用,我也不想创建一个。由于创建 StringToEnum 需要我在多个位置指定可能的枚举值。在不久的将来,除了我自己之外,其他人可能会添加新椅子。
关于这些 old/new 椅子如何以干净的方式 written/read to/from 文件,谁能想出任何巧妙的解决方案?
为新椅子分配不同的值,使它们不会有点掩码:
enum Chairs
{
OldChair1 = 0x00001,
OldChair2 = 0x00002,
OldChair3 = 0x00004,
NewChair1 = 0x80001,
NewChair2 // 0x8002
};