C++:是否可以重载 |位于同一 class 内的两个不同枚举的运算符?

C++: Is it possible to overload the | operator on two different enums residing inside the same class?

class myClass
{
    enum firstEnum { Value1, Value2, Value3};
    enum secondEnum { ValueA, ValueB, ValueC};
};

我想超载 |上面两个枚举的运算符。可能吗?

注意这里有两个枚举,不只是一个,我想重载 |对于两者。

谢谢。

是的,就像对常规函数所做的一样,您可以重载 不同类型参数的运算符

#include <iostream>

struct myClass
{
    enum firstEnum { Value1, Value2, Value3};
    enum secondEnum { ValueA, ValueB, ValueC};

    friend void operator|(firstEnum L, firstEnum R) { std::cout << "first\n"; }
    friend void operator|(secondEnum L, secondEnum R) { std::cout << "second\n"; }
};

int main()
{
    myClass::Value1 | myClass::Value2; // first
    myClass::ValueA | myClass::ValueB; // second
    myClass::Value1 | myClass::ValueA; // prints nothing, converts enums to builtin operator|(int, int)
}

Live Example.

但要小心老式的 enum,它们会隐式转换为整数类型,因此对 operator| 的混合调用将调用 int 上的内置 operator| .使用 C++11 enum class 以获得更多类型安全行为。

更新:上面的代码也可以为C++98编译,只是C++11提供了更多类型安全的枚举。