Максимальные и минимальные значения в перечислении C++

StackOverflow https://stackoverflow.com/questions/159006

  •  03-07-2019
  •  | 
  •  

Вопрос

Есть ли способ найти максимальное и минимальное определенное значения перечисления в С++?

Это было полезно?

Решение

Нет, в C++ невозможно найти максимальное и минимальное определенное значения любого перечисления.Когда необходима такая информация, часто рекомендуется определить значения «Последнее» и «Первое».Например,

enum MyPretendEnum
{
   Apples,
   Oranges,
   Pears,
   Bananas,
   First = Apples,
   Last = Bananas
};

Не обязательно указывать имена для каждого значения между First и Last.

Другие советы

Нет, не в стандартном C++.Вы можете сделать это вручную:

enum Name
{
   val0,
   val1,
   val2,
   num_values
};

num_values будет содержать количество значений в перечислении.

Нет.Перечисление в C или C++ — это просто список констант.Не существует более высокой структуры, которая могла бы хранить такую ​​информацию.

Обычно, когда мне нужна информация такого рода, я включаю в перечисление максимальное и минимальное значения примерно так:

enum {
  eAaa = 1,
  eBbb,
  eCccc,
  eMin = eAaaa,
  eMax = eCccc
}

На этой веб-странице приведены некоторые примеры того, как это может быть полезно: Глупые трюки с перечислением

  enum My_enum
    {
       FIRST_VALUE = 0,

       MY_VALUE1,
       MY_VALUE2,
       ...
       MY_VALUEN,

       LAST_VALUE
    };

после определения My_enum::LAST_VALUE== N+1

Не автоматически, но вы можете добавить искусственные значения перечисления для обозначения минимальных и максимальных значений, например.

typedef enum {start_of_colors=-1, eRed, eWhite, eBlue, eGray,
end_of_colors} eListOfTags;

for (eListOfTags i = start_of_colors+1; i < end_of_colors; i++) {
.... 
}

они вам даже не нужны, я просто говорю, например, если у вас есть:

enum Name{val0,val1,val2};

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

if(selectedOption>=val0 && selectedOption<=val2){

   //code
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top