我們使用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