如何在c ++中将枚举插入到另一个枚举中

时间:2011-06-16 09:27:42

标签: c++ enums enumeration

我使用枚举来表示系统中的所有信号,并且有一个基本信号,它们在枚举中表示,但我想通过调用函数或类似的函数向其添加其他信号 我可以在另一个中插入一个枚举吗?

3 个答案:

答案 0 :(得分:4)

事实上,枚举在编译时将标识符映射到整数。您无法在运行时更改它。但是对于运行时,模拟将是std::map<std::string, int>,在这种情况下,您可以在运行时添加新值,如下所示:

std::map<std::string, int> values;

// add new values in this way
values.insert( "var1", 100 );

答案 1 :(得分:1)

你不能扩展枚举本身,当然也不能在运行时扩展(这无论如何都是没有意义的,因为enum只是一个替换数字常量的文字列表)。

如果您实际上是想扩展代码中使用的常量列表,请继续阅读:

你可以做的是制作另一个以这种方式(或类似)“兼容”的枚举:

enum {
   E1_ONE,
   E1_TWO,
   E1_LAST,
} base;

enum {
   E1_THREE = E1_LAST,
   E1_FOUR,
   E1_EXT_LAST,
} extension;

在您处理新值的代码中使用enum extension类型,但在您扩展的旧代码中使用enum base类型。

enum基本上是一个限制值的整数,因此您必须验证限制等。

如果您可以访问原始源代码(我假设您这样做...),最好更改原始枚举,恕我直言。

答案 2 :(得分:1)

根据您最近的回复,我的猜测是您想要一个枚举代码列表,并且您想要随意修改该列表?

如果是这种情况,那么只需创建 int 的列表/向量/集。这将保留您的值,与您的枚举类型无关(因为所有枚举都使用隐藏的整数值进行初始化)。然后,您可以随意添加/删除此列表中的项目。

示例:

enum SignalsA {
        X,
        Y,
        Z
};

enum SignalsB {
        A,
        B,
        C
};

int main(){

        std::set<int> signal_set;

        signal_set.insert(Z); //Insert enum value from SignalsA
        signal_set.insert(A); //Insert enum value from SignalsB
}