枚举 – D lang enum类型安全相比

这种情况很容易出错:

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,即使你可以,我也不确定我会想要.命名枚举可以作为其基本类型的事实可能是有用的 – 这种不受限制的比较是一个不幸的副作用.

点赞