C++ 设置 "flags"

标签 c++ design-patterns

例子:

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/

相关文章:

c++ - 更改字体颜色时发生 SFML 访问冲突

c++ - enable_if 和自动返回类型?

c++ - Boost Property Tree Json 读取包含 LPWSTR 的文件

database - 业务逻辑验证的好地方

java - 用于处理扩展类中频繁逻辑更改的设计模式

java - 如何在没有 '*' 运算符的情况下执行乘法?

c++ - 如何清除arduino输出串口窗口中的垃圾字符?我需要使用软件串行发送和接收字符

java - 对 Joshua Bloch 的 Builder 设计模式的改进?

objective-c - 对于具有大量查找表的 iOS 应用程序,什么是好的模式?

sql - 创建 Sql 查询的设计模式