我目前有一组用作标志的枚举
enum Flags {
Flag1 = 1
Flag2 = 2
Flag3 = 4
Flag4 = 8
};
等等。然后,我使用内联使其成为|
以允许它们组合。使用这个系统,我可以使用简单的if语句检查独立的标志。
以这种方式打印组合标志会产生它们的总和,即:Flag2 | Flag4
会产生10
。
我的问题是,是否有办法列出当前分配给某些东西的所有标志,而不是它们的总和。
答案 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];
// ...
}
};