mrjbom
@mrjbom

Как комбинировать несколько значений из одного enum?

Привет.

У меня есть функция, которая получает нажатую клавишу
KeysEnum pressedKeys;
...
keyPressEventHandler(KeysEnum key)
{
    //добавляем key в pressedKeys
}

Как мне лучше сохранять несколько нажатых клавиш?
Кажется для этой цели можно использовать битовые операции, но я не знаю точно ли это.
  • Вопрос задан
  • 43 просмотра
Решения вопроса 2
@res2001
Developer, ex-admin
Битовые операции можно использовать только если ваш enum состоит из значений равных степеням двойки: 1, 2, 4, 8, ...
Если у вас произвольные значения в enum (1, 2, 3, 105, 888, ...) то битовые операции применять нельзя.
Если нужен какой-то универсальный вариант - сделайте массив значений.
Ответ написан
@vanyamba-electronics
#include <iostream>

using namespace std;

typedef enum {
    Key1 = 1,
    Key2 = 2,
    Key4 = 4,
    Key8 = 8
} Key;

void func(uint32_t keys)
{
    if (keys & 1)
        cout << "Key1 ";
    if (keys & 2)
        cout << "Key2 ";
    if (keys & 4)
        cout << "Key4 ";
    if (keys & 8)
        cout << "Key8 ";
    cout << endl;
}

int main()
{
    func(Key1 | Key4 | Key8);
    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Cedro Москва
от 70 000 до 100 000 ₽
Efix Group Москва
от 300 000 до 400 000 ₽
от 3 500 до 4 000 $
07 мар. 2021, в 23:34
5000 руб./за проект
07 мар. 2021, в 23:14
10000 руб./за проект