Se si decide di utilizzare enum per le vostre bandiere, ecco un utile macro che crea il codice per gli operatori bit a bit per il tipo enum.
#define GENERATE_ENUM_FLAG_OPERATORS(enumType) \
inline enumType operator| (enumType lhs, enumType rhs) \
{ \
return static_cast<enumType>(static_cast<int>(lhs) | static_cast<int>(rhs)); \
} \
inline enumType& operator|= (enumType& lhs, const enumType& rhs) \
{ \
lhs = static_cast<enumType>(static_cast<int>(lhs) | static_cast<int>(rhs)); \
return lhs; \
} \
inline enumType operator& (enumType lhs, enumType rhs) \
{ \
return static_cast<enumType>(static_cast<int>(lhs) & static_cast<int>(rhs)); \
} \
inline enumType& operator&= (enumType& lhs, const enumType& rhs) \
{ \
lhs = static_cast<enumType>(static_cast<int>(lhs) & static_cast<int>(rhs)); \
return lhs; \
} \
inline enumType operator~ (const enumType& rhs) \
{ \
return static_cast<enumType>(~static_cast<int>(rhs)); \
}
Usage:
enum Test
{
TEST_1 = 0x1,
TEST_2 = 0x2,
TEST_3 = 0x4,
};
GENERATE_ENUM_FLAG_OPERATORS(Test);
Test one = TEST_1;
Test two = TEST_2;
Test three = one | two;
bandiere implica per me che dovrebbe essere un enum .. – Nim
Vuoi dire per i set di flag di bit? O solo una singola bandiera? In quest'ultimo caso, userei un 'bool'. –
@Nim - per me, flag non è un enum - perché i flag possono essere usati con operatori bit a bit come '|', '&' e '~'. – tmp