В какой-то момент я рассмотрел реализацию класса/шаблона на С++, который поддерживал бы Enum, который будет вести себя так же, как в Ada. Прошло некоторое время с тех пор, как я подумал об этой проблеме, и мне было интересно, разрешил ли кто-нибудь эту проблему?
EDIT:
Мои извинения, я должен уточнить, какую функциональность я считал полезной в реализации Ada Enum. Учитывая перечисление
type fruit is (apple, banana, cherry, peach, grape);
Мы знаем, что фрукты являются одним из перечисленных фруктов: яблоко, банан, вишня, персик, виноград. Ничего действительно отличного от С++.
Что очень полезно, так это следующие функциональные возможности, которые вы получаете с каждым перечислением в Ada без дополнительной работы:
- Распечатка перечислимого значения генерирует версию строки
- вы можете увеличивать перечислимую переменную
- вы можете уменьшать перечислимую переменную
Надеюсь, что эта проблема еще немного изменится.
Заметки добавлены из комментариев:
Полезные функции перечислений Ada
- Первое значение в перечислении -
fruit'first
, которое даетapple
. - Последнее значение в перечислении равно
fruit'last
, которое даетgrape
. - Операция приращения
fruit'succ(apple)
, которая даетbanana
. - Операция декремента
fruit'pred(cherry)
, которая также даетbanana
. - Преобразование из перечисления в целое число равно
fruit'pos(cherry)
, которое возвращает2
, потому что Ada использует нулевые подсети. - Преобразование из целых чисел в перечисление равно
fruit'val(2)
, который возвращаетcherry
. - Преобразование из перечисления в строку равно
fruit'Image(apple)
, которое возвращает строку (верхний регистр)"APPLE"
. - Преобразование из строки в перечисление -
fruit'Value("apple")
, которая возвращает значениеapple
.
См. также связанные вопросы SO: