cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

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

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +5, -0 Автор идеи: Сергей Щербаков

Добавляются 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 верится мало :) image

apolukhin commented 3 years ago

Андрей Руссков, 9 июля 2018, 7:01 можно подождать метаклассы - с их помощью можно будет создавать подобное

apolukhin commented 3 years ago

Дубликат #70