Как увеличить enum в VS C ++ 6.0? - PullRequest
5 голосов
/ 24 июня 2010

Я копирую и вставляю некоторый код, увеличивающий перечисление:

myenum++;  

Этот код работал нормально, так как он был скомпилирован в VS.NET C ++ 2003

Я сейчас работаю в VS 6.0 и получаю ошибку:

ошибка C2676: двоичное '++': 'enum ID 'не определяет это оператор или преобразование в тип приемлемо для предопределенного оператора

Как я могу заставить это вести себя так же в 6.0?

Ответы [ 4 ]

13 голосов
/ 24 июня 2010

Я не вижу ничего плохого в определении оператора ++ для хорошо понятного перечисления. Разве это не цель перегрузки оператора? Если контекст не имеет смысла (например, перечисление с дырами в нем), то, конечно, это не имеет смысла. Определение оператора * для класса с именем Complex, который реализует комплексные числа, является не просто правильным, а отличным применением перегрузки математических операторов в C ++!

Если разработчик определяет перечисление, где оператор ++ имеет очевидный и интуитивный смысл для клиентов этого перечисления, тогда это хорошее применение перегрузки этого оператора.

enum DayOfWeek {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
inline DayOfWeek operator++(DayOfWeek &eDOW, int)
{
   const DayOfWeek ePrev = eDOW;
   const int i = static_cast<int>(eDOW);
   eDOW = static_cast<DayOfWeek>((i + 1) % 7);
   return ePrev;
}
4 голосов
/ 24 июня 2010

перечисление может быть интегральным, но это не значит, что оно охватывает непрерывный диапазон.

Это

enum {
  A, 
  B,
  C,
}

Может По умолчанию будет

enum {
  A = 0, 
  B = A + 1,
  C = B + 1,
}

и, таким образом, вы можете уйти с

int a = A;
a++;

Однако, если у вас есть

enum {
  A = 2, 
  B = 4,
  C = 8,
}

, теперь +1 не сработает.

Сейчас, если у вас также были такие вещи, как

enum {
  FIRST,
  A = FIRST, 
  B,
  C,
  LAST = C
}

, то при итерации перечисления вы делали бы А и С дважды?

Какова цель итерации перечисления?Вы хотите сделать «для всех» или для некоторого подмножества, есть ли на самом деле порядок перечисления?

Я бы бросил их все в контейнер и повторил бы это вместо

  • неупорядоченный - используйте набор
  • упорядоченный - вектор или список
2 голосов
/ 24 июня 2010

Пожалуйста, попробуйте преобразовать в int, добавить один (+1) и преобразовать обратно в перечисление.

1 голос
/ 18 апреля 2013
myenum=(myenum_type)((int)myenum+1);

Это некрасиво, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...