如何断言值是否在枚举范围内

时间:2016-08-22 11:18:43

标签: c++ c++03

我正在从字节流中读取一个值,并希望断言该值在枚举范围内。我想知道是否有比下面更通用的方法。

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,
    }

2 个答案:

答案 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 将自动更新。