首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中遍历枚举

在C++中遍历枚举
EN

Stack Overflow用户
提问于 2010-09-04 06:46:10
回答 4查看 6.9K关注 0票数 0

C++枚举问题。

所以我有一个文件的列表,以及它们的I,我需要遍历它们,并对它们做一些事情。大部分内容都是相同的,但有一些特定于文件的事情需要完成。我尝试将文件I放在一个枚举中,并对其进行迭代。但是,fileID是不连续的,可以跳来跳去。

目前,我有类似这样的东西

代码语言:javascript
复制
for(int i = 0; i < FILE_ENUM_MAX; i++)
{
    currentFile = myEnum(i);
    // do stuff
}

enum myEnum {
    file1 = 0x1111,
    file2 = 0x8000,
    file3 = 0x75,
    file4 = 0x120,
    FILE_ENUM_MAX = 4
}

这不起作用;我只是遍历了文件0、1、2和3。我的想法是,我不能通过请求项目N来获得枚举中的第N个项目。那么,迭代这个枚举的最好方法是什么?或者我应该干脆把它扔掉?我也许可以按数字顺序排列项目,但我更喜欢顺序无关紧要的解决方案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-04 07:04:15

我猜技术含量较低的解决方案可能是跳过枚举,只创建一个静态数组:

代码语言:javascript
复制
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))

int FILE_ENUM[] = { 0x1111, 0x8000, 0x75, 0x120 };

for(int i = 0; i < ARRAYSIZE(FILE_ENUM); i++) {
    currentFile = myEnum[i];
    // do stuff
}

TJ

票数 4
EN

Stack Overflow用户

发布于 2010-09-04 06:50:05

不幸的是,C++没有提供您想要的遍历枚举的方法。

票数 4
EN

Stack Overflow用户

发布于 2010-09-04 06:52:04

我有两个建议:

  1. 使用std::vector包含枚举。
  2. 使用std::map包含枚举。

解决方案2提供了一个好处,其中键是文件ID,值可以是文件的名称(或包含文件属性的对象,如文件句柄或指针)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3640063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档