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

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

Взгляните на библиотеку github.com/Neargye/magic_enum

dalle 10.06.2019 12:05

Одна из причин, по которой я мог бы захотеть узнать максимальное значение перечисления, не добавляя его в само перечисление, заключается в том, что мой компилятор не жалуется (C4061), когда мой оператор 'switch' не обрабатывает явно значение «максимального значения».

snips-n-snails 20.11.2019 02:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
83
2
49 338
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Нет, нет способа найти максимальное и минимальное определенные значения любого перечисления в C++. Когда требуется такая информация, часто рекомендуется определить значения Last и First. Например,

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

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

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

Adrian Cornish 11.01.2012 10:50

@ Адриан: Да, это правда. Необязательно, чтобы у каждого значения было определенное имя, чтобы этот метод был полезен. Я отредактирую соответственно

Jeff Yates 12.01.2012 00:22

хорошо, но вы должны поддерживать его ценность, если добавляются новые.

Matt 30.05.2019 03:32

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

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

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

num_values ​​будет содержать числа-1 значений

4pie0 19.03.2014 19:21

@lizusek: num_values будет содержать количество значений в перечислении, кроме самого num_values.

dalle 19.03.2014 20:43

@dalie да, вот почему это будет: количество значений - 1. Конечно, я знаю, что вы имеете в виду значения, которые означают значения, исключая последнее, которое не является реальным значением, а является вспомогательным. Однако я бы посоветовал сделать это более понятным.

4pie0 19.03.2014 20:46

@dalle Только если val0 = 0

user2470258 14.09.2017 13:12

@ user2470258, как определено выше, всегда 0.

dalle 14.09.2017 14:17

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

Matt 30.05.2019 03:32

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

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

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

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

статья, на которую вы ссылаетесь, относится к тому времени, когда авторский компилятор "не поддерживает новый официальный логический тип C++" .... Я никогда раньше не читал что-то настолько древнее: P.

largest_prime_is_463035818 23.06.2020 14:47

  enum My_enum
    {
       FIRST_VALUE = 0,

       MY_VALUE1,
       MY_VALUE2,
       ...
       MY_VALUEN,

       LAST_VALUE
    };

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

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

enum Name{val0,val1,val2};

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

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

   //code
}

Это очень хрупкое решение. Если вы добавляете новое значение перечисления, вам необходимо изучить всю базу кода, чтобы обновить такие тесты.

Marcelo Cantos 04.08.2013 12:46

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

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++) {
.... 
}

подумайте о добавлении описания, чтобы помочь с ответом.

Bibberty 22.02.2019 02:29

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