Указание типа данных enum (детский такой вопрос...)

Модератор: Модераторы разделов

nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

Указание типа данных enum

Сообщение nick87720z »

Вообще то я уже длительное время занимаюсь разработкой just for fun, но осенило только сейчас.
Сначала я собирался прямо написать на багзилу gcc про добавление этой фичи как расширения, но погуглив, понял, что это может быть уже реализовано, и доклад будет просто не нужен.

В некоторых других постах нашел упоминание про ENUM_ENUMERATION_TYPE, но гугление по этому имени не дало результатов.
Наверное плохо искал, т.к. смог найти только упоминание на msdn (а это еще и С++, не считая оффтопика).
Спасибо сказали:
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

Re: Указание типа данных enum

Сообщение nick87720z »

Как всегда, только задам публичный вопрос, как внезапно нахожу ссылку с ответом (Enumerated type на вики).
Похоже, enum class - стандартная фича C++, и в C такого нет (разве что используя glib и G_TYPE_ENUM).
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20977
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Указание типа данных enum

Сообщение Bizdelnick »

А зачем?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Указание типа данных enum

Сообщение NickLion »

Слоупок замечание, enum class — это фича C++11, а, значит, может не везде быть. И к тому же enum class — это перечисление в пространстве имён. Задание типа — это несвязная фича, т.е. допустимы:

Код: Выделить всё

enum class A {a, b, c};
enum X : unsigned char {x, y, z};
enum class Q : unsigned short {q, w, e};


Bizdelnick
enum class — для более серьёзного контроля типов (нельзя неявно преобразовывать в int и наоборот), а также, чтобы избежать дублирования названия перечислений, например:

Код: Выделить всё

enum class HorizontalAlignment {Left, Center, Right};
enum class VerticalAlignment {Top, Center, Bottom};

Без class будет ошибка, Center — два раза, а так — нет. Раньше изобретали что-то вроде:

Код: Выделить всё

enum class HorizontalAlignment {HorizontalAlignment_Left, HorizontalAlignment_Center, HorizontalAlignment_Right};
enum class VerticalAlignment {VerticalAlignment_Top, VerticalAlignment_Center, VerticalAlignment_Bottom};

Что немного странно смотрится в C++ при наличии пространст имён.

enum X : type используется для точного задания размера хранимых данных.
Спасибо сказали: