不互斥的列舉

2021-08-30 13:31:15 字數 2315 閱讀 6439

假設我有乙個列舉類,這個列舉類用來修飾乙個類的各種屬性,列舉並不互斥,可以協同修飾乙個類。或者說這個列舉用於表明這個類的各個狀態。可以將這個狀態標記為onoff

假設我有乙個列舉buff:

public:

enum buff

以上的列舉代表了三種不同的增益,用16進製制int型別表示。

定義了乙個列舉組buffs

然後繫結buffs和buff,預定義為: declare_flags(buffs, buff);

列舉物件本質是int型別,因此這個buffs類需要實現幾個int的邏輯運算符號過載。

#ifndef core_flags_h

#define core_flags_h

#include "core/global.hpp"

#include "qtypeinfo.h"

#include "dtypetraits.h

class dflag

inline dflag(uint ai) : i(int(ai)) {}

inline dflag(short ai) : i(int(ai)) {}

inline dflag(ushort ai) : i(int(uint(ai))) {}

inline operator int() const

inline operator uint() const };

dan_declare_typeinfo(dflag, d_primitive_type);

class incompatibleflag

};inline incompatibleflag::incompatibleflag(int ai) : i(ai) {}

templateclass localapi dflags

#endif

inline dflags(enumtype f) : i(int(f)) {}

inline dflags(dflag f) : i(f) {}

inline dflags &operator&=(int mask)

inline dflags &operator&=(uint mask)

inline dflags &operator&=(enumtype mask)

inline dflags &operator|=(dflags f)

inline dflags &operator|=(enumtype f)

inline dflags &operator^=(dflags f)

inline dflags &operator^=(enumtype f)

inline operator int() const

inline int toint() const

inline dflags operator|(dflags f) const

inline dflags operator|(enumtype f) const

inline dflags operator^(dflags f) const

inline dflags operator^(enumtype f) const

inline dflags operator&(int mask) const

inline dflags operator&(uint mask) const

inline dflags operator&(enumtype f) const

inline dflags operator~() const

inline bool operator!() const

inline bool testflag(enumtype f) const

private:

int i;

};#define declare_flags(flags, enum)\

typedef dflagsflags;

#endif

使用方法如下

private:

buffs _my_buff;

public:

void setbuffstatus(buff buff, bool on /*= true*/)

else }

bool checkbuffstatus(buff buff) const

通過或與非運算,能檢測到當前列舉組中是否存在指定列舉物件。

或者換一種說法,能檢測到指定列舉物件是否處於啟用狀態。

QActionGroup互斥不生效的問題

問題描述 我有乙個單例項的qaction的集合actions 然後傳入不同的q 進行新增到不同的q 例項中。其中使用到了qactiongroup將其中的單個qaction進行互斥的處理。當建立了多個q 例項後,釋放了其中乙個例項,其他q 的qactiongroup互斥就不生效了。之前的實現方式 ac...

最小不相容性(列舉子集)

難度 困難 給你乙個整數陣列 nums 和乙個整數 k 你需要將這個陣列劃分到 k 個相同大小的子集中,使得同乙個子集裡面沒有兩個相同的元素。乙個子集的 不相容性 是該子集裡面最大值和最小值的差。請你返回將陣列分成 k 個子集後,各子集 不相容性 的 和 的 最小值 如果無法分成分成 k 個子集,返...

互斥鎖 執行緒的同步與互斥

前面我們驗證了互斥鎖能夠保證執行緒的互斥操作,讓各執行緒對全域性變數的累加的次數保證了正確性執行緒 中 互斥鎖的介面函式 互斥鎖的初始化以及銷毀函式 初始化互斥鎖有兩種方式,一種是函式初始化,引數arr表示的是mutex的屬性,一般為null,設定為預設屬性 另一種是直接定義乙個全域性變數,並用巨集...