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

标签 c++ enums casting

我是 C++ 的新手,所以提前道歉,

假设我有 2 个枚举:

enum Side
{
    Left,
    Right
};

enum Direct
{
    Forward,
    Backward
};

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

例如:

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

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

最佳答案

您正在寻找的是 union :

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

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

但我不得不问:你真的确定这样做是明智的吗?好像自找麻烦。

(这样的泛型不是您要找的:它们纯粹是编译时构造,无助于存储一种类型的值并将其解释为另一种类型。)

关于C++如何编写通用结构来保存任何枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314058/

相关文章:

c++ - Xcode:与第 3 方框架链接和编译

c++ - 为什么 range-v3 将其函数对象放入内联命名空间?

java - 为什么下面的方法不会产生潜在的堆污染?

c - 出于什么原因 printf 不能正确显示 float ?

c++ - union 与位掩码和位移位

c++ - 保存的 Gdiplus::Bitmap 总是有 Alpha channel (RGBA/ARGB)

java - 获取枚举的字符串值

java - 我可以在 JpaRepository nativeQuery 中使用枚举参数吗?

c++ - GTK+ 对多个小部件使用一个处理程序

c - 初始化使指针无需强制转换