在C ++中迭代Enums

C ++枚举问题。

因此,我有一个文件列表,以及我需要重复执行的文件列表,并执行一些操作。 大部分的东西都是一样的,但有一些文件特定的事情需要完成。 我试着把文件ID放在一个枚举中,并迭代它。 不管怎样,fileIDs是不连续的,并跳过。

目前,我有类似的东西

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


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

#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


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


我有两个建议:

  • 使用std::vector来包含枚举。
  • 使用std::map来包含枚举。
  • 解决方案2提供了一个好处,其中关键是文件ID,值可以是文件的名称(或包含文件属性的对象,例如文件句柄或指针)。

    链接地址: http://www.djcxy.com/p/91509.html

    上一篇: Iterate through Enums in C++

    下一篇: Use an enum to select which class to instantiate