我正在从字节流中读取一个值,并希望断言该值在枚举范围内。我想知道是否有比下面更通用的方法。
int nval = ReadValue();
Assert(nval);
bool Assert(nval)
{
if(nval == zero || nval == one || nval==two || (nval>=reserved_low && nval <= reserved_high))
return true;
return false
}
enum Foo
{
zero = 0,
one = 1,
two = 2,
reserved_low = 3,
reserved_high = 255,
}
答案 0 :(得分:1)
不在C ++ 03中,没有。
你的方式非常优秀(当然也是可读的),虽然你可以认识到,如果你的所有枚举都在0到255范围内,return !(nval & ~0xff);
就可以完成这项工作。
您可以使用switch
来提高性能,并在nval>=reserved_low && nval <= reserved_high
案例中比较default
。
答案 1 :(得分:1)
这是一个类似但稍微清洁的技巧:
enum Foo {
zero = 0,
one = 1,
two = 2,
reserved_low = 3,
reserved_high = 255,
foo_count
};
bool Assert(nval) {
if(nval > zero && nval < foo_count) {
return true;
}
return false;
}
因为 enum 将每个条目增加1,所以 count 现在将设置为值256.如果您稍后在 count 将自动更新。