Оператор C++14 << для вставки потока и класса enum
Я пишу игру, в которой есть 2 игрока, "ЧЕРНЫЙ" и "БЕЛЫЙ".
У меня есть следующий enum класс:
enum class PlayerType
{
BLACK, WHITE
};
Я хотел бы написать оператор ostream<< для этого класса. Вот моя попытка:
std::ostream& operator<<(std::ostream& os, const PlayerType& pt)
{
if(pt == PlayerType::BLACK)
os << "Black";
return os;
}
Однако я получаю следующую ошибку компилятора:
operator<< must take exactly 1 argument
Я думаю, проблема в том, что я вложил класс enum и operator<< в другой класс; class Player
,
Могу ли я что-нибудь сделать с этим, не удаляя enum из этого класса?
2 ответа
Могу ли я что-нибудь сделать с этим, не удаляя enum из этого класса?
Если это имеет смысл, вы можете объявить оператора как friend
из Player
, Это делает его не членом. Тем не менее, вы должны спросить себя, действительно ли дружба - это отношение, которое вам нужно между оператором и классом. Если нет, переместите оператор за пределы определения класса.
При объявлении любого из бинарных операторов как неstatic
член они будут принимать один аргумент в дополнение к неявному объекту, на который указывает this
, Объект, на который указывает this
всегда является левым аргументом двоичного оператора, а объявленный аргумент является правым аргументом. Операторы с дополнительными аргументами не являются законными.
Поскольку потоковые классы должны находиться слева от <<
оператор, вы не можете определить потоковые операторы как неstatic
члены. Делать их не-членами функции - единственная реальная возможность. Используя friend
Функция для определения оператора вывода по-прежнему эффективно объявляет функцию, не являющуюся членом.