#cpp #перегрузка_операторов
Можно ли перегружать операторы для типа перечисления enum? Если да, то как? Не нашел запрета, но реализовать не получилось. Я хочу взять и сделать, например, так: Mode t = UP; t++; /*или*/ t+=2;
Ответы
Ответ 1
Можно. Обычно делают так: enum class Mode { UP, DOWN }; // Префиксный инкремент. Mode& operator++(Mode& m) { m = static_cast(static_cast (m) + 1); return m; } // Постфиксный инкремент. Mode operator++(Mode& m, int) { Mode old = m; m = static_cast (static_cast (m) + 1); return old; } // Сложение. Mode operator+(const Mode m, const int i) { return static_cast (static_cast (m) + i); } Mode operator+(const int i, const Mode m) { return operator+(m, i); } // Вычитание. Mode operator-(const Mode m, const int i) { return static_cast (static_cast (m) - i); } Mode operator-(const int i, const Mode m) { return operator-(m, i); } // Сложение с присваиванием. Mode& operator+=(Mode& m, int i) { m = operator+(m, i); return m; } // Вычитание с присваиванием. Mode& operator-=(Mode& m, int i) { m = operator-(m, i); return m; } Если используется не enum class, а обычный enum, то внутренний static_cast можно убрать.
Комментариев нет:
Отправить комментарий