这种情况很容易出错:
enum A{x=0};
enum B{y=0};
if (A.x == B.y) {
writeln("Indeed.");
}
比较不同枚举的枚举…错误地发生在我身上.
如何使这些枚举类型安全?即让dmd至少警告我,我正在比较2个不同的枚举?
我知道在比较之前两个值都会被提升为’int’.
有没有办法没有创建一个新类型来帮助我这个?
编辑:与此问题相关的官方DMD错误报告:https://issues.dlang.org/show_bug.cgi?id=6227(PR:https://github.com/dlang/dmd/pull/6444)
最佳答案 作为Adam D. Ruppe解决方案的扩展,您可以使用通用比较:
bool compare(T)(T a, T b) if (is(T == enum)) {
return a == b;
}
至少这种方式你不必为每个枚举类型写一个比较.
它可能不太理想,但我不知道你可以覆盖枚举类型的opEquals,即使你可以,我也不确定我会想要.命名枚举可以作为其基本类型的事实可能是有用的 – 这种不受限制的比较是一个不幸的副作用.