C++枚举中的最大值和最小值
Max and min values in a C++ enum
有没有办法在 c++ 中找到枚举的最大值和最小定义值?
不,无法找到C++中任何枚举的最大值和最小定义值。当需要此类信息时,定义"最后一个"和"第一个"值通常是一种很好的做法。例如
enum MyPretendEnum
{
Apples,
Oranges,
Pears,
Bananas,
First = Apples,
Last = Bananas
};
不需要为 First
和 Last
之间的每个值命名值。
不,不是标准C++。您可以手动执行此操作:
enum Name
{
val0,
val1,
val2,
num_values
};
num_values
将包含枚举中的值数。
No.C 或 C++ 中的枚举只是一个常量列表。没有更高的结构可以保存这些信息。
通常,当我需要此类信息时,我会在枚举中包含最大值和最小值,如下所示:
enum {
eAaa = 1,
eBbb,
eCccc,
eMin = eAaaa,
eMax = eCccc
}
请参阅此网页,了解其实用性的一些示例: 愚蠢的枚举技巧
enum My_enum
{
FIRST_VALUE = 0,
MY_VALUE1,
MY_VALUE2,
...
MY_VALUEN,
LAST_VALUE
};
定义后,My_enum::LAST_VALUE== N+1
尽管公认的答案正确地指出没有标准化的方法来获取enum
元素的min
和max
值,但在较新版本的 gcc (>= 9.0) 中至少有一种可能的方法,它允许这样写:
enum class Fruits { Apples, Oranges, Pears, Bananas };
int main() {
std::cout << "Min value for Fruits is " << EnumMin<Fruits>::value << std::endl; // 0
std::cout << "Max value for Fruits is " << EnumMax<Fruits>::value << std::endl; // 3
std::cout << "Name: " << getName<Fruits, static_cast<Fruits>(0)>().cStr() << std::endl; // Apples
std::cout << "Name: " << getName<Fruits, static_cast<Fruits>(3)>().cStr() << std::endl; // Bananas
std::cout << "Name: " << getName<Fruits, static_cast<Fruits>(99)>().cStr() << std::endl; // (Fruits)99
}
这无需任何自定义特征或提示即可工作。
这是一个非常粗略的概念证明,我相信它可以进一步扩展,这只是为了表明这在今天是可能的。
这个片段在 C++14 中编译,经过一些调整,它肯定也可以在 C++11 中运行,但我认为这在 C++11 之前
是不可能的警告:这可能会在将来的编译器版本中中断。
现场演示
如果确定所有枚举值都按升序排列(或者至少最后一个保证具有最大值),则可以使用魔术枚举库,而无需向枚举定义添加额外的元素。它是这样用的:
#include <magic_enum.hpp>
...
const size_t maxValue = static_cast<size_t>(magic_enum::enum_value<MyEnum>(magic_enum::enum_count<MyEnum>() - 1));
魔法枚举 git:https://github.com/Neargye/magic_enum
你甚至不需要它们,我所做的只是我说,例如如果你有:
enum Name{val0,val1,val2};
如果您有 switch 语句并检查是否达到最后一个值,请执行以下操作:
if(selectedOption>=val0 && selectedOption<=val2){
//code
}
相关文章:
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何在数组中交换最小和最大的位置?
- 需要使用模板查找数组的第二个最小和最小值
- 使用 std::min_element、std::max_element 查找矢量中的最小和最大元素
- 为什么我不能使用最小和最大这两个词作为变量名称?
- 在运行时为随机分布类成员设置最小和最大边界?
- 如何使用气泡排序从最小到最大对 4 个数组进行排序? C++
- 如何拒绝 cin 中的字符输入并定义最小和最大整数值
- 类型 *阵列的最小或最大值的类功能 *
- C++ 100 万个变量名称的最小和最大变量名称长度是多少
- 想要以正弦曲线的形式在循环中连续将值从最小变为最大
- 数组内存地址总是按最小到最大的顺序排列吗
- 使用向量而不是数组从最小到最大对数字进行排序C++
- 在 c++ 中给出两个整数向量(大小和类型相同),我想从最小到最大元素对一个进行排序,并更改第二个向量的顺序
- 在用户定义结构的向量中查找最小和最大元素的索引
- 二进制搜索,用于查找排序数组中比给定值最小和最大的元素
- c++中的函数如何以最小的复制返回值或引用?
- 我如何确定我可以传递给编译器选项的最小和最大值
- 如何为每个光栅带设置最小和最大颜色值(使用GDAL)
- 在c++中最小化分支-如果值是非零则递增