第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在C ++中使用枚舉作為標(biāo)志?

如何在C ++中使用枚舉作為標(biāo)志?

C++
梵蒂岡之花 2019-07-31 18:23:27
如何在C ++中使用枚舉作為標(biāo)志?將enums作為標(biāo)志處理可以在C#中通過[Flags]屬性很好地工作,但是在C ++中執(zhí)行此操作的最佳方法是什么?例如,我想寫:enum AnimalFlags{     HasClaws = 1,     CanFly =2,     EatsFish = 4,     Endangered = 8};seahawk.flags = CanFly | EatsFish | Endangered;但是,我收到關(guān)于int/ enum轉(zhuǎn)換的編譯器錯(cuò)誤。是否有更好的表達(dá)方式而不僅僅是直接的鑄造?優(yōu)選地,我不想依賴來自第三方庫的構(gòu)造,例如boost或Qt。編輯:如答案中所示,我可以通過聲明seahawk.flags為避免編譯器錯(cuò)誤int。但是,我想有一些機(jī)制來強(qiáng)制執(zhí)行類型安全,所以有人不能寫seahawk.flags = HasMaximizeButton。
查看完整描述

3 回答

?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

“正確”的方法是為枚舉定義位運(yùn)算符,如:

enum AnimalFlags{
    HasClaws = 1,
    CanFly =2,
    EatsFish = 4,
    Endangered = 8};inline AnimalFlags operator|(AnimalFlags a, AnimalFlags b){return static_cast<AnimalFlags>(static_cast<int>(a) | static_cast<int>(b));}

等等其他位運(yùn)算符。如果枚舉范圍超出int范圍,則根據(jù)需要進(jìn)行修改。


查看完整回答
反對 回復(fù) 2019-07-31
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

注意(也有點(diǎn)偏離主題):使用位移可以完成另一種制作唯一標(biāo)志的方法。我,我自己,發(fā)現(xiàn)這更容易閱讀。

enum Flags{
    A = 1 << 0, // binary 0001
    B = 1 << 1, // binary 0010
    C = 1 << 2, // binary 0100
    D = 1 << 3, // binary 1000};

它可以將值保持為int,因此在大多數(shù)情況下,32個(gè)標(biāo)志清楚地反映在移位量中。


查看完整回答
反對 回復(fù) 2019-07-31
?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊


對于像我這樣的懶人,這里是復(fù)制和粘貼的模板化解決方案:


template<class T> inline T operator~ (T a) { return (T)~(int)a; }

template<class T> inline T operator| (T a, T b) { return (T)((int)a | (int)b); }

template<class T> inline T operator& (T a, T b) { return (T)((int)a & (int)b); }

template<class T> inline T operator^ (T a, T b) { return (T)((int)a ^ (int)b); }

template<class T> inline T& operator|= (T& a, T b) { return (T&)((int&)a |= (int)b); }

template<class T> inline T& operator&= (T& a, T b) { return (T&)((int&)a &= (int)b); }

template<class T> inline T& operator^= (T& a, T b) { return (T&)((int&)a ^= (int)b); }


查看完整回答
反對 回復(fù) 2019-07-31
  • 3 回答
  • 0 關(guān)注
  • 562 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)