【问题标题】:Iterate through Enums in C++遍历 C++ 中的枚举
【发布时间】:2010-09-03 22:46:09
【问题描述】:

C++ 枚举问题。

所以我有一个文件列表,以及它们的 ID,我需要对其进行迭代和处理。大部分内容是相同的,但有一些特定于文件的事情需要完成。我尝试将文件 ID 放入枚举中,然后对其进行迭代。但是,fileID 是不连续的,并且会跳来跳去。

目前,我有类似的东西

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 个项目。那么迭代这个枚举的最佳方法是什么?还是我应该摆脱它?我可能可以按数字顺序排列项目,但我更喜欢顺序无关紧要的解决方案。

【问题讨论】:

标签: c++ enums


【解决方案1】:

我想低技术的答案可能是跳过枚举,而只是创建一个静态数组:

#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

【讨论】:

  • 是的,直到您需要永久更改文件号 54。现在,在 324 个列表中计算 54 个元素有多容易?我更喜欢更高级别的结构以提高可读性等。每个人都有自己的:)
  • 我可以假设您使用宏来表示大小,因为您想要 C 兼容的代码吗?在 C++ 中,这当然是不必要的。
【解决方案2】:

不幸的是,C++ 没有提供一种方法来像你想要的那样遍历枚举。

【讨论】:

  • 一个可以写,看我的回答:)
【解决方案3】:

我有两个建议:

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

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

【讨论】:

    【解决方案4】:

    i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2010-12-12
      • 2011-09-01
      • 2023-03-03
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多