2011-06-16 185 views
1

我使用枚举来表示系统中的所有信号,并且存在枚举中表示的基本信号,但我想通过调用函数向其添加其他信号或像这样的 我可以在另一个枚举插入?如何在C++中将枚举插入另一个枚举

+2

更详细,如果可能的代码示例,您的意思,请解释一下。现在不清楚你在问什么。 – Jesper 2011-06-16 09:30:51

+0

您想在运行时将新的枚举值添加到枚举吗?这是不可能也不必要的,因为它们被编译为字面整数,所以你可以使用任何其他的int值来扩展你的enum – 2011-06-16 09:31:23

+0

[在C++中扩展枚举?](http://stackoverflow.com/问题/ 1804840 /扩展枚举在C) – 2011-06-16 09:42:26

回答

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基本上是有限制值的整数,所以你必须验证限制等

如果您有访问原始的源代码(我假设你这样做......)这将是更好地改变原来的枚举,恕我直言。

4

枚举实际上在编译时将一个标识符映射到一个整数。你不能在运行时改变它。但是对于运行时的模拟将是一个std::map<std::string, int>,在这种情况下,你可以在运行时按如下所示添加新值:根据您最近的答复

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

// add new values in this way 
values.insert("var1", 100); 
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 
} 
+0

我认为这将有助于我的代码,谢谢:) 但我有一个问题是什么设置因为我想做一个单独的功能中的最后两行不是在主要功能 – fank 2011-06-16 10:20:50

+0

我不知道我是否理解你的问题。你在问什么是是? Set是一个关联容器,您可以在其中存储多种类型,并通过它们的值访问它们。文档在这里: http://www.cplusplus.com/reference/stl/set/ 你可以制作单独的函数,接收std :: set &和一个int,然后只需将该int插入到在函数参数中设置列表。 – Daniel 2011-06-16 10:24:00

+0

我想要访问另一个函数中的枚举而不是主函数 – fank 2011-06-16 10:25:04