假設我有乙個列舉類,這個列舉類用來修飾乙個類的各種屬性,列舉並不互斥,可以協同修飾乙個類。或者說這個列舉用於表明這個類的各個狀態。可以將這個狀態標記為on
或off
。
假設我有乙個列舉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,設定為預設屬性 另一種是直接定義乙個全域性變數,並用巨集...