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