我们使用2008年C++:如何检查,该枚举只
VS存在很大的枚举,这是许多开发商
此枚举有一个类型__int64(Microsoft扩展)填充唯一值,我想让编译器抱怨enum中的非唯一值。
如果这是一个平常的枚举,我会做这样的:
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)
和函数F将有一个错误,如果E1有2个相同的价值观
而且还会有一个错误,如果一个开发人员忘了添加一个新值切换
,但我的枚举的类型为__int64(或long long)
,当我尝试做E1 E1在同一台交换机它截断v如果我将e1转换为__int64,编译器不会抱怨,如果开发人员忘记向交换机中添加一个新值(因此,如果我将e1转换为__int64,编译器不会抱怨,整个检查功能变得无用)
问题:有人知道我能做些什么吗?或者也许VS 2008(或C++)有另一种工具来确保枚举:__int64只有唯一值?
我能想到的最好的是'不要明确指定值(除第一个之外)'。 –
@Mark有时候枚举是有用的,因为如果交换机中某些值被遗漏,编译器会警告您。另一方面,价值本身可以用于其他一些目的(不仅用于区分案例)。 – Yury
@Mark,这些值是标志(0x000..01,0x00..02,0x00..04等) – Alek86