c++:是否有可能在同一个类中的两个不同枚举上重载|运算符?
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 << "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提供了更多类型安全的枚举。
相关文章:
- C++两个源文件之间共享的枚举的静态实例
- 从 cin 获取 c++ 中结构中多个枚举的输入
- 如何使用谷歌测试检查两个枚举类元素的相等性?
- 两个枚举可以不具有相似名称的成员吗
- 多个枚举中的名称相同
- 在多个枚举上循环
- 是否有C++准则将第一个枚举设置为"safe"默认值?
- 多个枚举
- 从字符串转换时,如何组合多个枚举
- C :两个功能,每个功能都采用枚举参数,签名匹配
- 两个具有相同价值的枚举,如何访问它们
- '='应初始化所有枚举成员或仅初始化第一个枚举成员;
- 多个枚举值的开关/机箱
- C++-程序中的多个枚举模型
- 如何根据 2 个枚举值检查创建具有 2 个数据类型参数C++模板类
- 是否用换行符分隔的多个枚举,然后逗号始终可移植
- 链接两个枚举类型成员
- 我的类包含 1 个枚举、2 个 int 和一个指针。它没有虚函数,但测量 20 字节。为什么?
- 两个枚举之间的重载强制转换操作符
- 多个枚举声明