我有按位枚举来保存某个类的两种状态设置。我尝试开发简单的功能来打开或关闭该位。 这是正确且快速的方法吗?
enum myEnum { eeNull = 0, ee1 = 1, ee2 = 2, ee4 = 4, ee8 = 8 };
template<class T>
inline T &SetBit(T &eValue, const int iBit, const bool bState)
{
return eValue = (T) ((eValue| (iBit * bState)) & ~(iBit * !bState));
}
int main()
{
myEnum eE;
eE = eeNull;
SetBit<myEnum>(eE, ee2, true);
SetBit<myEnum>(eE, ee1, true);
SetBit<myEnum>(eE, ee2, false);
return 0;
}
这是您通常会这样做的方式:
enum myEnum {
ee1 = 1 << 0,
ee2 = 1 << 1,
ee3 = 1 << 2,
ee4 = 1 << 3
};
int main() {
int flag = ee1 | ee3 | ee4;
}