mrjbom
@mrjbom

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

Привет.

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

Как мне лучше сохранять несколько нажатых клавиш?
Кажется для этой цели можно использовать битовые операции, но я не знаю точно ли это.
  • Вопрос задан
  • 208 просмотров
Решения вопроса 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;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы