我使用枚举来表示系统中的所有信号,并且存在枚举中表示的基本信号,但我想通过调用函数向其添加其他信号或像这样的 我可以在另一个枚举插入?如何在C++中将枚举插入另一个枚举
回答
你不能扩展枚举本身,当然不是在运行时(这是毫无意义的,因为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
基本上是有限制值的整数,所以你必须验证限制等
如果您有访问原始的源代码(我假设你这样做......)这将是更好地改变原来的枚举,恕我直言。
枚举实际上在编译时将一个标识符映射到一个整数。你不能在运行时改变它。但是对于运行时的模拟将是一个std::map<std::string, int>
,在这种情况下,你可以在运行时按如下所示添加新值:根据您最近的答复
std::map<std::string, int> values;
// add new values in this way
values.insert("var1", 100);
,我的猜测是,你想拥有的枚举代码列表,并且您想要随意修改该列表?
如果是这种情况,那么只需创建一个列表/向量/集合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
}
我认为这将有助于我的代码,谢谢:) 但我有一个问题是什么设置
我不知道我是否理解你的问题。你在问什么是
我想要访问另一个函数中的枚举而不是主函数 – fank 2011-06-16 10:25:04
- 1. 将枚举设置为C#类中的另一个枚举
- 2. 将多个列表枚举值写入另一个枚举
- 3. 如何导入另一个枚举成我的枚举
- 4. 如何枚举Objective-C中的枚举?
- 5. 如何将一个枚举转换为另一个枚举在Java中?
- 6. C#枚举指向另一个枚举(重构)
- 7. 如何将C++枚举复制到Objective C枚举中
- 8. 如何使用枚举来定义另一个枚举?
- 9. 你如何使用枚举与另一个枚举?
- 10. 将C++枚举导入C#
- 11. 在枚举中枚举
- 12. 如何将一个枚举的元素映射到另一个枚举?
- 13. 如何将一个枚举值转换/分配给另一个枚举
- 14. MySQL插入(枚举?)
- 15. 在C中传入枚举
- 16. 变量指向一个枚举或另一个枚举?
- 17. 地图一个枚举另一个枚举
- 18. Python 3枚举:枚举继承另一个枚举不起作用?
- 19. C++ - 程序中的多枚举枚举
- 20. Java枚举:从另一个枚举中收集信息
- 21. 使用另一个枚举中的特定值创建枚举
- 22. 如何在保持枚举枚举
- 23. 在C#枚举#
- 24. 枚举在C++
- 25. 枚举在C
- 26. 如何定义一个枚举有多个值,这是另一个枚举
- 27. C#枚举如何检查枚举中是否存在描述
- 28. 如何使一个枚举项目具有另一个枚举的项目?
- 29. C#实例枚举从另一个
- 30. C++使用枚举从另一个类
更详细,如果可能的代码示例,您的意思,请解释一下。现在不清楚你在问什么。 – Jesper 2011-06-16 09:30:51
您想在运行时将新的枚举值添加到枚举吗?这是不可能也不必要的,因为它们被编译为字面整数,所以你可以使用任何其他的int值来扩展你的enum – 2011-06-16 09:31:23
[在C++中扩展枚举?](http://stackoverflow.com/问题/ 1804840 /扩展枚举在C) – 2011-06-16 09:42:26