Я создал класс с указанным в нем перечислением. Я также хотел определить некоторые операторы для перечисления следующим образом:
class MyClass
{
public:
enum MyEnum { CONSTA, CONSTB, CONSTC };
// ...
MyEnum& operator++(MyEnum& orig);
MyEnum operator++(MyEnum& orig, int);
// ...
}
Для этого кода gcc сообщает следующее сообщение об ошибке:
.../MyClass.h|10|error: postfix ‘MyClass::MyEnum& MyClass::operator++(MyClass::MyEnum&) must take ‘int as its argument
.../MyClass.h|11|error: ‘MyClass::MyEnum MyClass::operator++(MyClass::MyEnum&, int) must take either zero or one argument
Это означает, что компилятор считает, что я хочу написать оператора для MyClass, а не для MyEnum. Поэтому он хочет, чтобы я уменьшил аргументы.
Мой вопрос:
Может ли класс каким-то образом содержать операторные функции для чего-то другого, кроме самого себя (например, для внутреннего типа), или я должен перемещать эти функции вне MyClass?
Вы можете использовать глобальные перегрузки операторов для этого
class MyClass
{
public:
enum MyEnum { CONSTA, CONSTB, CONSTC };
};
MyClass::MyEnum& operator++(MyClass::MyEnum& orig) { return ++orig; }
MyClass::MyEnum operator++(MyClass::MyEnum& orig, int)
{ MyClass::MyEnum temp = orig++; return temp; }
Смотрите компилируемый код здесь, пожалуйста.
MyEnum
общедоступен и в противном случае будет почти бесполезным.
MyEnum& orig
для объявлений сигнатур операторов.MyClass
, я хочу написать один дляMyEnum
. Я пропустил параметрMyEnum& orig
, как бы яMyEnum& orig
к переменной enum, которую я хочу увеличить изнутри функции?