Example:
enum Flags
{
A,
B,
C,
D
};
class MyClass
{
std::string data;
int foo;
// Flags theFlags; (???)
}
My goal would be something like this:
if ( MyClassInst.IsFlagSet( A ) ) // ...
MyClassInst.SetFlag( A ); //...
// Warning, brain-compiled code ahead!
const int A = 1;
const int B = A << 1;
const int C = B << 1;
const int D = C << 1;
class MyClass {
public:
bool IsFlagSet(Flags flag) const {return 0 != (theFlags & flag);}
void SetFlag(Flags flag) {theFlags |= flag;}
void UnsetFlag(Flags flag) {theFlags &= ~flag;}
private:
int theFlags;
}
In C, you set special (non-sequential) enum values manually:
enum Flags
{
A = 1,
B = 2,
C = 4,
D = 8
};
It is better for type-safety to use:
const int A = 1;
const int B = 2; /* ... */
because (A | B) is not one of your enum values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With