在我的班級之一,我有一個存儲像這樣一組枚舉標誌的整數C++檢查枚舉標誌
enum AttackFlags
{
Contact = 1, //Move connects with target
Projectile = 2, //Attack is projectile based
Unblockable = 4, //Attack can not be blocked
UncounterableLv1 = 8, //Attack can't be countered except by extreme counter attack skills/status effects
UncounterableLv2 = 16, //Attack can not be countered
Flinches = 32, //Has a chance to stun the enemy, pushing back their next turn
Unreflectable = 64, //Attack penetrates reflect. Only checked for Magic attacks
IgnoreDefenderStatusEffects = 128, //Ignores active status effects on the defender
IgnoreAttackerStatusEffects = 256, //Ignores active status effects on the attacker
IgnoreDefenderAbilities = 512, //Ignore the defenders abilities
IgnoreAttackerAbilities = 1024, //Ignore the attackers abilities
IgnoreArmorRating = 2048, //Ignore the defensive boosts of armor
IgnoreWeaponRating = 4096, //Ignore the attack boost from weapons
HighCritical = 8192, //The move has an increased chance to crit
CausesStatus = 16384, //Can the move cause status effects?
Elemental = 32768, //Is the move elemental based?
Unimplemented = 65536, //has the move been implemented yet?
ModsTimer = 131072, //Does it have an effect on the target or users timer?
Heals = 262144, //Does the move heal?
SecondaryEffects = 524288, //Attack has additional effects besides basic attack
PhysicalAttackFlag = 1048576, //Is the Class Physically based? I.E. blocked by Protect and Shield
MagicAttackFlag = 2097152, //Is the move Magically Based? I.E. is it affected by things like Shell
MultiHit = 4194304, //Does it enxcapsulate more then 1 hit
SingleUse = 8388608, //Attack can only be used once per battle
DoesNotCauseDamage = 16777216
};
class Attack
{
int AtkFlags; //Stores AttackFlags |'d together
}
我想一個方法添加到我的攻擊類具有以下簽名
bool HasAttackFlags(int flags);
標誌會有很多AttackFlags |'d在一起。如果我只想檢查一個單一的標誌,我可以只將& AtkFlags和標誌放在一起,但是因爲我必須檢查多個可能的標誌,所以這不起作用。我怎樣才能正確地檢查多個標誌?我想,以避免傳遞載體/組標誌覈對簡單地|「荷蘭國際集團一組標誌在一起是那麼簡單,構建載體/提前
編輯設置
感謝:
爲了澄清我的意思,我可能有以下
Attack atk;
atk.AtkFlags = Contact | Projectile | Heals | MagicAttackFlag;
後來的後來,我要檢查的旗幟上ATK像這樣:
bool res = atk.HasAttackFlags(Contact | Projectile);
個
資源應該是真實的,相反
bool res = atk.HasAttackFlags(Contact | Unreflectable);
應該是假的becase的AtkFlags不包含這兩個聯繫ADN Unreflectable。
如果任何標誌的啓用第一個示例代碼返回true,第二個返回true,如果所有的標誌都啓用。只是爲了澄清。 –