Добавление в std системы для работы с флагами и оператора flag

Сергей Щербаков
Сергей Щербаков

Добавляются std::flag8_t, flag16_t, flag32_t, flag64_t.

Так же следующие функции:
std::clear_flag
std::add_flag
std::del_flag
std::check_flag

Далее пользователь языка создаёт перечесление:

enum class camera_flag_t : std::flag8_t {

MoveLeft    = 1 << 0,

MoveRight   = 1 << 1,

MoveForward = 1 << 2,

MoveBack    = 1 << 3,

MoveSpeedUP = 1 << 4

};

Использовать можно так:

float move = std::check_flag(camera_flag, camera_flag_t::MoveSpeedUP) ? movespeed * 10 : movespeed;

if (key == GLFW_KEY_A) std::add_flag(ra->camera.camera_flag, camera_flag_t::MoveLeft);

Ключевой оператор flag является альтернативой enum, то есть создаёт перечесление флагов, но без описания побитового сдвига, то есть выглядить это будет так:

flag class camera_flag_t : std::flag8_t {

MoveLeft,

MoveRight,

MoveForward,

MoveBack,

MoveSpeedUP

 

};

К сожалению в добавление нового оператора flag верится мало :)


5
рейтинг
1 комментарий
Андрей Руссков

можно подождать метаклассы - с их помощью можно будет создавать подобное

Андрей Руссков
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения