gpt4 book ai didi

c++ - 如何按照标准迭代枚举?

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:44 24 4
gpt4 key购买 nike

我在谷歌上搜索如何迭代枚举,我发现了各种建议,比如 How can I iterate over an enum?尽管没关系,所有这些方法都必须返回迭代整数,但我发现建议的解决方案或多或少是一种黑客攻击。为什么这个操作没有得到更好的支持,还有更深层次的原因吗?或者从另一方面看,哪个更可移植(包括 C 和 C++ 之间的那个)和更符合标准?

最佳答案

要在 C 和 C++ 之间可移植地遍历通用枚举,只需使用查找表:

typedef enum
{
hello = 123,
world = 456
} hello_t;

const hello_t TABLE [ENUM_ITEMS] =
{
hello,
world
};

for(size_t i=0; i<ENUM_ITEMS; i++)
{
printf("%d", (int)TABLE[i]);
}

不幸的是,没有办法以编程方式获取常量 ENUM_ITEMS,除非您有一个未分配任何值的非特定枚举,例如 enum { hello, world, ENUM_ITEMS }。如果一些枚举常量被显式分配了数字,那么你只能像这样做一些 hack-ish 的事情:

typedef enum
{
ENUM_START = __LINE__,
hello = 123,
world = 456,
ENUM_ITEMS = __LINE__ - ENUM_START - 1
} hello_t;

关于c++ - 如何按照标准迭代枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com