У меня есть несколько флагов, определенных следующим образом, с использованием перечисления с областью видимости:
enum class Capability : int
{
NoCapabilities = 0,
SomethingCool = 1,
UberCool = 1 << 1,
EvenCooler = 1 << 2,
};
Q_DECLARE_FLAGS( Capabilities, Capability )
Теперь я пытаюсь использовать оператор равенства:
Capabilities(DataCapability::NoCapabilities) == Capability::NoCapabilities
Я не могу использовать testFlag
в текущем примере, начиная с NoCapabilities = 0
.Это работает, если enum не ограничен (удаление ключевого слова class
).
Очевидно, приведение к int (static_cast<int>(NoCapabilities)
) работает, но это действительно уродливо.
Каков подход крешить это?Плохо ли иметь нулевое значение 0 и проверять его?