我已定义了enum
这样的结构
class myC {
enum accessClass {
none,
forL,
forM,
forA
};
typedef accessClass AccessType;
AccessType aType;
};
myC obj;
问题是我必须只选择一个成员。但是我想选择多个成员。目前如果我写
obj->aType = forL;
obj->aType = forM;
然后后者将取代第一个。
我想为enum
结构选择多个项目/成员/属性。
我该怎么办?
答案 0 :(得分:6)
使用bitfield。
enum MyEnum {
A = 1<<0; // 0x01
B = 1<<1; // 0x02
C = 1<<2; // 0x04
D = 1<<3; // 0x08
E = 1<<4; // 0x10
F = 1<<5; // 0x20
...
}
MyEnum m;
m = A; // m = 0x01 (Only A is on)
// Set values by ORing them in.
m |= F; // OR in field F. Now m = 0x21 (A and F are on)
// Set multiple values by ORing them together.
m = (A | C | E); // m = 0x15 (A, C, and E)
// Clear values by ANDing them out.
m &= ~C; // AND out field C. m = 0x11 (A and E are on)
// Test values with AND
if (m & A)
printf("A is set\n");
if (m & B)
printf("B is set\n");
请参阅“使用bitflags”:http://www.dylanleigh.net/notes/c-cpp-tricks.html
答案 1 :(得分:1)
enum
实例可能只包含int
的多个值:即根本不是。
选择一个标准容器(可能是std::set
)并用myC::accessClass
个对象填充它。
答案 2 :(得分:0)
如果你想表示多个值,你需要一个数组(因为你在C ++中,你可能想要一个std::vector
)。 e.g:
class myC {
public:
enum accessClass {
none,
forL,
forM,
forA
};
std::vector<accessClass> aTypes;
};
myC obj;
obj.aTypes.push_back(myC::forL);
obj.aTypes.push_back(myC::forM);