После обсуждения вопроса " Увеличение и уменьшение" класса enum я хотел бы спросить о возможной реализации арифметических операторов для типов enum class
.
Пример из оригинального вопроса:
enum class Colors { Black, Blue, White, END_OF_LIST };
// Special behavior for ++Colors
Colors& operator++( Colors &c ) {
c = static_cast<Colors>( static_cast<int>(c) + 1 );
if ( c == Colors::END_OF_LIST )
c = Colors::Black;
return c;
}
Есть ли способ реализовать арифметические операторы без приведения к типу с уже определенными операторами? Я не могу думать ни о чем, но кастинг беспокоит меня. Приведения обычно указывают на то, что что-то не так, и для их использования должна быть очень веская причина. Я ожидал бы, что язык позволит реализовать оператор, не прибегая к конкретному типу.
Обновление от декабря 2018 года. Похоже, что одна из статей, посвященных С++ 17, решает эту проблему, по крайней мере, частично, разрешая преобразования между переменной класса enum и базовым типом: http://www.open-std.org/jtc1/sc22/wg21/документы/документы/2016/p0138r2.pdf