考虑以下(简化)代码:
enum eTestMode
{
TM_BASIC = 1, // 1 << 0
TM_ADV_1 = 1 << 1,
TM_ADV_2 = 1 << 2
};
...
int m_iTestMode; // a "bit field"
bool isSet( eTestMode tsm )
{
return ( (m_iTestMode & tsm) == tsm );
}
void setTestMode( eTestMode tsm )
{
m_iTestMode |= tsm;
}
这是可靠,安全和/或良好的做法吗?还是除了使用const ints而不是enum之外,还有一种更好的方法来实现我想做的事情?我真的更喜欢枚举,但是代码的可靠性比可读性更重要。
最佳答案
我看不到那个设计有什么不好的。
但是,请记住enum
类型可以保存未指定的值。根据谁使用您的函数,您可能首先要检查tsm
的值是有效的枚举值。
由于enums
是整数值,因此可以执行以下操作:
eTestMode tsm = static_cast<eTestMode>(17); // We consider here that 17 is not a valid value for your enumeration.
但是,这样做很丑陋,您可能会认为这样做会导致未定义的行为。