例子:
enum Flags
{
A,
B,
C,
D
};
class MyClass
{
std::string data;
int foo;
// Flags theFlags; (???)
}
- 如何才能在 MyClass 的实例中设置上述枚举中任意数量的“标志”A、B、C 和 D?
我的目标是这样的:
if ( MyClassInst.IsFlagSet( A ) ) // ...
MyClassInst.SetFlag( A ); //...
- 我必须使用一些数组或 vector 吗?如果是,怎么做?
- 在这种情况下枚举是个好主意吗?
最佳答案
// 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;
}
关于C++ 设置 "flags",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2574547/