C ++如何编写通用结构来保存任何枚举

时间:2011-03-15 15:34:17

标签: c++ enums casting

我对C ++很陌生,所以请提前道歉,

假设我有2个枚举:

enum Side
{
    Left,
    Right
};

enum Direct
{
    Forward,
    Backward
};

我想要一个对象,我可以保存枚举值,然后检索它不知道使用了哪个实际枚举,

e.g:

Direct direction = Direct::Left;
myStruct.genericEnum = direction;
Side side = myStruct.genericEnum;

怎么可以这样做?我应该使用泛型类型吗? (不确定我是否理解它们足以使用它们),我是否需要将枚举保存为myStruct中的int,然后在读取值时显式转换? (这对我来说似乎很乱)提前谢谢

3 个答案:

答案 0 :(得分:2)

你要找的是工会:

struct MyStruct {
  union { Side side; Direct direct; } genericEnum;
};

Direct direction = Direct::Left;
myStruct.genericEnum.direct = direction;
Side side = myStruct.genericEnum.side;

但我不得不问:你真的确定这是明智的做法吗?这似乎是在寻找麻烦。

(泛型本身并不是你想要的:它们纯粹是一个编译时构造,并且无助于存储一种类型的值并将其解释为另一种类型。)

答案 1 :(得分:1)

“通用类型”无法做到这一点,因为C ++没有这种类型。

所有枚举都是有效的整数。您正在寻找的“Generic Enum”是一个整数。

答案 2 :(得分:0)

你以某种奇怪的方式混合方向和方面。结构应该保持两者吗?看union它可以容纳其中一种类型,但不能混合它。