【发布时间】:2012-08-25 02:21:36
【问题描述】:
我在枚举项目中遇到了问题。 在 EventDef.h 中,
enum EventDef {
EVT1 = 0,
EVT2,
EVT3,
EVT_NUM,
}
这样,我可以在另一个头文件UIEventDef.h中扩展EventDef系统
#include "EventDef.h"
enum UIEventDef {
UIEVT1 = EVT_NUM,
UIEVT2,
UIEVT3,
}
但是,有一个限制,我不能以同样的方式在 NetEvent.h 中执行此操作。
#include "EventDef.h"
enum NetEventDef {
NETEVT1 = EVT_NUM,
NETEVT2, //wrong: this will have the same value as UIEVT2
NETEVT3,
}
在 C++ 中是否有更好的编译时解决方案,例如可以提供帮助的模板?
【问题讨论】:
-
具有相同值的问题到底是什么?无论如何,类型不同(UIEventDef 与 NetEventDef),因此您可能不应该比较它们。
-
顺便说一句,我使用了 COUNTER 宏,但遗憾的是它不起作用:(
-
到 zxcdw。我有一个 switch-case 事件处理程序,所以我需要它们具有不同的值。是的,我可以给他们分类,但我只是想要一个更好、更灵活的解决方案
-
@rechardchen:你想达到什么目标?枚举的目的是提供 不同的 类型,这样即使相同的值也无关紧要。您基本上是在尝试实现相反的效果:在不同标题中具有不同值的单个范围......您应该说明您想要 解决 的问题,而不是询问如何处理您的 损坏的设计。
-
@rechardchen:提供类别是一个比单个枚举在所有方面都更灵活的解决方案。
标签: c++ templates macros enums