#c #enums #typedef #strongly-typed-enum
#c #перечисления #typedef #strongly-typed-enum
Вопрос:
При определении структуры сетевого сообщения:
- Хотите сохранить поле Op в качестве перечисления (чтобы ограничить допустимые значения).
- Необходимо сохранить все поля как беззнаковые, а Op, в частности, должен быть uint32_t.
Есть ли способ объединить эти требования? что-то вроде: typedef enum Op : uint32_t {сохранить = 100, извлечь = 101, удалить = 200};
Комментарии:
1.
"100" "101" "200
Что означают эти строки? Вы хотите использовать строку в качестве перечислителя в enum?2.
enum class
? Я понятия не имею, чего вы хотите.3. В основном хотят сузить допустимое значение -> Перечисление —> строка. Буду признателен за другие предложения. Спасибо. open-std.org/JTC1/SC22/wg21/docs/papers/2016/p0138r2.pdf
4. @Sprite, я отредактировал перечисление после вашего Q. Спасибо.
5. Не ясно, что вы хотите, если это перечисление с определенным типом, тогда оно у вас есть на C 11 следующим образом:
enum name : type { enumerator = constexpr , enumerator = constexpr , ... }
Ответ №1:
"100" "101" "200
Ну, я не совсем понимаю, что означают эти строки? Ваш вопрос мне не очень понятен.
Похоже, то, что вы хотите, это enum class
(перечисления с ограниченной областью действия).
enum class Op : uint32_t
{
_100 = 100,
_101 = 101,
_200 = 200
};
ограничение допустимых значений
ДА.
Необходимо сохранить все поля как беззнаковые, а Op, в частности, должен быть uint32_t.
ДА.
Вы должны назвать эти перечислители чем-то значимым, а не таким же, как значение.
В соответствии с вашим отредактированным сообщением:
enum class Op : uint32_t
{
save = 100,
retrieve = 101,
delete_ = 200
};
Комментарии:
1. Отлично, спасибо!