Да, вы можете определить оператор ...
Adjust_mode operator+(Adjust_mode lhs, int rhs)
{
return static_cast<Adjust_mode>(
(static_cast<int>(lhs) + rhs) % 7);
}
Adjust_mode operator+(int lhs, Adjust_mode rhs)
{
return static_cast<Adjust_mode>(
(lhs + static_cast<int>(rhs)) % 7);
}
Обратите внимание, что вам нужно и то, и другое, чтобы Adjust_mode_ + 1 и 1 + Adjust_mode_ работали.Если вы предоставляете только одну функцию operator+(Adjust_mode, Adjust_mode)
, тогда любое из приведенных выше выражений вместо этого преобразует enum в int и возвращает результат int.
Это довольно хакерский вариант, поэтому лучше использовать обычную именованную функцию.выполнить операцию, а не использовать оператора, которого слишком легко вызвать случайно.