rec*_*hen 2 c++ macros enums templates
我的枚举项目遇到了问题.在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++中是否有更好的编译时解决方案,例如可以提供帮助的模板?
可扩展枚举的想法本质上不是"糟糕的设计".在其他语言中有它们的历史,即使c ++不直接支持它们.有不同种类的可扩展性.
可扩展枚举的内容对我们有用
枚举可扩展性的示例
您在示例代码中显示的那种可扩展性在单独的c ++中没有优雅的实现.事实上,正如您所指出的,它很容易导致问题.
想想你如何使用可扩展的枚举.也许不可变单例对象的集合/映射将满足您的需求.
在c ++中使用可扩展枚举的另一种方法是使用代码生成器.每个想要添加到可扩展枚举的编译单元都将id记录在它自己的单独的.enum文件中.在构建时,在编译之前,脚本(即perl,bash,...)查找所有.enum文件,读取它们,为每个id分配数值,并写出一个与任何其他文件一样包含的头文件.