c++:是否有可能在同一个类中的两个不同枚举上重载|运算符?

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

本文关键字:两个 枚举 运算符 重载 有可能 是否 同一个 c++      更新时间:2023-10-16
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 << "firstn"; }
    friend void operator|(secondEnum L, secondEnum R) { std::cout << "secondn"; }
};
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)
}
<<p> 生活例子/strong>。

但是要小心旧式的enum,它们隐式地转换为整型,因此对operator|的混合调用将调用int上的内置operator|。使用c++ 11 enum class来获得更多类型安全的行为。

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