获得枚举的最高价值

时间:2014-05-06 11:36:56

标签: c++ visual-studio-2013

我有C ++代码,它使用bitset来存储在我的数据结构中找到枚举的哪些值(它实际上有点复杂,但对于这个问题并不重要)。 / p>

这意味着当我有这样的枚举时:

enum Color
   {
     RED
   , GREEN
   , BLUE
   };

我想像这样定义我的bitset:

std::bitset<3>

当然,我不想对值3进行硬编码。

在某些情况下,我可以简单地添加一个终结器&#39;对于枚举,像这样:

enum Color
   {
     RED
   , GREEN
   , BLUE
   , _COLOR_TERMINATOR
   };

我可以这样写:

std::bitset<_COLOR_TERMINATOR>

但我不能在所有的枚举中这样做。如果我会在我的一些枚举上执行此操作,代码检查程序(如Lint)会抱怨并非所有的枚举值都用在switch语句中。

有没有办法在枚举本身中不改变某些内容的情况下获取枚举中的最大值?例如。类似于std::max<Color>

使用Visual Studio 2013和C ++。

感谢。

2 个答案:

答案 0 :(得分:2)

也许您可以使用专门为您的枚举添加最大定义值的特征

template<class T> struct top_bound;
template<> struct top_bound<Color>{ static const size_t value = 3;};

然后

std::bitset<top_bound<Color>::value> my_bitset;

每次枚举更改时,您仍然需要更改特征,但是只有一个明确的位置可以执行此操作。

答案 1 :(得分:0)

如果您写下以下内容,您的lint版本是否会抱怨?

enum Color
 {
   RED
 , GREEN
 , BLUE
 , LAST_COLOR = BLUE
 };

LAST_COLOR的这个定义相对容易维护(你只需要在最后添加或删除颜色时更改它,而不是在其他地方插入或删除颜色时,以及插入或删除时颜色强制您更改两行,它们至少是代码的连续行。然后,您可以编写

std::bitset<LAST_COLOR + 1>

或者,在定义enum Color后立即,如何

static const size_t _COLOR_TERMINATOR = BLUE + 1;