2015-06-19 48 views
0

我現在有一組枚舉是用來標誌C++列表中所有列舉的標誌獨立

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

等等等等等等。然後,我使用內聯使其成爲|以允許它們組合。使用這個系統,我可以使用簡單的if語句檢查獨立標誌。

以這種方式打印組合標誌產生它們的總和,即:Flag2 | Flag4將產生10

我的問題是,如果有辦法列出當前分配給某些東西作爲獨立的整數,而不是他們的總和的所有標誌。

回答

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. 

這是你的意思嗎?

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]; 
     // ... 
    } 
};