私たちはVS 2008を使用しています
多くの開発者が入力する大きな列挙型があります
この列挙型には __int64 型 (Microsoft 拡張機能) があり、列挙型の値が一意でないことをコンパイラに訴えさせたいと考えています。
それが通常の列挙型である場合、私は次のようにします:
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++) には、enum : __int64 が一意の値しかないことを確認するための別の手段がありますか?