获取枚举的最大值
Getting the highest value of an enum
我有一个c++代码,它使用bitset来存储在我的数据结构中找到的枚举值(它实际上有点复杂,但这对问题无关紧要)。
这意味着当我有一个像这样的enum:
enum Color
{
RED
, GREEN
, BLUE
};
我想这样定义我的bitset:
std::bitset<3>
当然我不想硬编码值3
在某些情况下,我可以简单地在枚举中添加一个"终止符",如下所示:
enum Color
{
RED
, GREEN
, BLUE
, _COLOR_TERMINATOR
};
我可以这样写:
std::bitset<_COLOR_TERMINATOR>
但是我不能在所有的枚举中都这样做。如果我在我的一些枚举上这样做,代码检查器(如Lint)会抱怨不是所有的枚举值都在switch语句中使用。
是否有一种方法可以在不改变枚举本身的情况下获得枚举中的最大值?例如,std::max<Color>
?
使用Visual Studio 2013和c++。
谢谢。
也许你可以为你的枚举使用一个专门的trait来添加最大定义值
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;
你仍然需要在每次枚举改变时改变trait,但是你只有一个显式的地方去做。
如果你写了下面的代码,你的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;
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用指针从C++中的数组中获取最大值
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 整数溢出,最大值为 pow(10,19)
- 以C++递归方式查找向量中的最大值
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如何使用可变参数模板类使用模板元编程获得最大值
- C++不同的最小最大值实现
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 查找包含 N 个元素的数组的最小值和最大值
- 获取枚举的最大值
- 通过numeric_limits为枚举赋最大值
- C++枚举中的最大值和最小值