Можно ли определить операторов tilde ~
для перечислений? Например, у меня есть enum State в моем примере, и я хотел бы иметь возможность написать result &= ~STATE_FAIL;
. я сделал что-то вроде этого:Перегрузка оператора тильды «~» для перечислений
#include <iostream>
enum State
{
STATE_OK = 0x0,
STATE_FAIL = 0x1,
STATE_LOW = 0x2,
STATE_HIGH = 0x4
};
State & operator|=(State & a, const State b)
{
a = static_cast<State>(static_cast<int>(a) | static_cast<int>(b));
return a;
}
State & operator&=(State & a, const State b)
{
a = static_cast<State>(static_cast<int>(a) & static_cast<int>(b));
return a;
}
State & operator~(State& a)
{
a = static_cast<State>(~static_cast<int>(a));
return a;
}
int main()
{
State result = STATE_OK;
result |= STATE_FAIL; // ok
result &= STATE_FAIL; // ok
result &= ~STATE_FAIL; // fail
return 0;
}
Я получаю следующее сообщение об ошибке:
In function
int main()
: Line 35: error: invalid conversion fromint
toState
compilation terminated due to -Wfatal-errors.
Отливка перечислений в другом вопросе, но он не показывает взятие аргумент по значению и возврат значения вместо ссылок в ответе @tuple_cat для этого вопроса. Это важно при создании правильного _bitwise NOT_ 'operator ~'. –