Mic*_*ter 1 c++ enums operator-overloading
我在C++中有几个类似于旗帜的枚举.例如:
enum some_state {
state_normal = 1 << 0,
state_special = 1 << 1,
state_somethingelse = 1 << 2,
state_none = 0,
};
some_state var1;
Run Code Online (Sandbox Code Playgroud)
现在使用像&或的位运算符|,我得到编译器错误.我知道我可以超载operator |et.al. 对于枚举,但我讨厌为每一个枚举再次这样做.有没有一种很好的方法来重用运算符重载?
enum some_state {
state_normal = 1 << 0,
state_special = 1 << 1,
state_somethingelse = 1 << 2,
state_none = 0,
};
int main() {
some_state var1 = state_normal;
some_state var2 = state_special;
unsigned int var3 = var1 | var2;
}
Run Code Online (Sandbox Code Playgroud)
对我来说很好.你不能在没有重载的情况下使用|,&etc的原因是因为编译器不能保证var1 |的结果 var2是枚举中的有效值.如果要采用移位标志,则需要采用整数类型,而不是枚举类型.这在Direct3D等专业标题中一直使用.