C ++独立列出所有枚举标志

时间:2015-06-19 05:15:08

标签: c++ enums flags

我目前有一组用作标志的枚举

enum Flags {
    Flag1 = 1
    Flag2 = 2
    Flag3 = 4
    Flag4 = 8
};

等等。然后,我使用内联使其成为|以允许它们组合。使用这个系统,我可以使用简单的if语句检查独立的标志。

以这种方式打印组合标志会产生它们的总和,即:Flag2 | Flag4会产生10

我的问题是,是否有办法列出当前分配给某些东西的所有标志,而不是它们的总和。

2 个答案:

答案 0 :(得分:4)

enum Flags {
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
Flag4 = 8,
};

uint32_t my_flags = Flag1 | Flag2;

if(my_flags & Flag1) { cout << "I have flag 1" << endl; }
if(my_flags & Flag2) { cout << "I have flag 2" << endl; }

// etc.

这是你的意思吗?

答案 1 :(得分:0)

这个怎么样?

#include <cstdint>
#include <bitset>

enum Flags
{
    Flag0 = 1
  , Flag1 = 2
  , Flag2 = 4
  , Flag3 = 8
};

using FlagBits = std::bitset<4>;

int main ()
{
    FlagBits flgs(Flag1 | Flag2);
    for (int i = 0; i < flags.size(); ++i) {
        bool flg = flgs[i];
        // ...
    }
};