我们使用 VS 2008
有一个很大的枚举,由许多开发人员填充
这个枚举有一个类型 __int64 (微软扩展),我想让编译器抱怨枚举中的非唯一值。
如果这是一个通常的枚举,我会这样做:
enum E1
{
E11 = 0x01F00,
E12 = 0x01F00,
E13
};
#pragma warning(push)
#pragma warning(error: 4061)
#pragma warning(error: 4062)
void F(E1 e1)
{
switch (e1)
{
case E11:
case E12:
case E13:
return;
}
}
#pragma warning(pop)
如果 E1 有 2 个相同的值,函数 F 会出错
如果开发人员忘记添加新值来切换,它会出现另一个错误
但我的枚举类型为 __int64 (或 long long)
当我尝试为 E1 e1 执行相同的开关时,它会截断值并抱怨值,差异是 0x100000000 或 0x200000000 ....
如果我将 e1 转换为 __int64,编译器不会抱怨,如果开发人员忘记向开关添加新值(因此整个检查功能变得无用)
问题:有人知道我能做些什么吗?或者也许VS 2008(或C++)有另一种工具来确保枚举:__int64 只有唯一值?