установка нескольких атрибутов для структуры enum - PullRequest
2 голосов
/ 07 января 2012

Я определил enum структуру, подобную этой

class myC {
  enum accessClass {
    none,
    forL,
    forM,
    forA
  };

  typedef accessClass AccessType;
  AccessType aType;
};

myC obj;

проблема в том, что я должен выбрать только одного участника. Однако я хочу выбрать несколько членов. В настоящее время, если я напишу

obj->aType = forL;
obj->aType = forM;

тогда последний заменит первый.

Я хочу выбрать несколько элементов / элементов / атрибутов для структуры enum.

Что мне делать?

Ответы [ 3 ]

6 голосов
/ 07 января 2012

Использовать битовое поле .

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");

См. «Использование битовых флагов»: http://www.dylanleigh.net/notes/c-cpp-tricks.html

2 голосов
/ 07 января 2012

Экземпляр enum может содержать несколько значений только столько, сколько может int: то есть, совсем не .

Выберите стандартный контейнер (возможно, std::set) и заполните его myC::accessClass объектами.

0 голосов
/ 07 января 2012

Если вы хотите представить несколько значений, вам понадобится массив (как и в C ++, вам, вероятно, понадобится, например, std::vector).например:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...