I\'m not very used to programming with flags, but I think I just found a situation where they\'d be useful:
I\'ve got a couple of objects that register themselves as lis
Your enumeration needs to be powers of two :
enum
{
TAKES_DAMAGE = 1,
GRABBABLE = 2,
LIQUID = 4,
SOME_OTHER = 8
};
Or in a more readable fashion :
enum
{
TAKES_DAMAGE = 1 << 0,
GRABBABLE = 1 << 1,
LIQUID = 1 << 2,
SOME_OTHER = 1 << 3
};
Why ? Because you want to be able to combine flags with no overlapping, and also be able to do this:
if(myVar & GRABBABLE)
{
// grabbable code
}
... Which works if the enumeration values look like this :
TAKES_DAMAGE: 00000001
GRABBABLE: 00000010
LIQUID: 00000100
SOME_OTHER: 00001000
So, say you've set myVar
to GRABBABLE | TAKES_DAMAGE
, here's how it works when you need to check for the GRABBABLE flag:
myVar: 00000011
GRABBABLE: 00000010 [AND]
-------------------
00000010 // non-zero => converts to true
If you'd set myVar
to LIQUID | SOME_OTHER
, the operation would have resulted in :
myVar: 00001100
GRABBABLE: 00000010 [AND]
-------------------
00000000 // zero => converts to false