我对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,然后在读取值时显式转换? (这对我来说似乎很乱)提前谢谢
答案 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
它可以容纳其中一种类型,但不能混合它。