Пояснение к оператору << перегрузка - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь понять, как работает перегрузка операторов.

Я хочу закодировать его так, чтобы я мог написать

Log(Log::LEVEL_ERR) << "fatal error: " << 13 ; 

И для строки, и для числа перегруженный операториспользуется.

Теперь у меня есть

class Log{
  public:
    std::ostream& operator<<(char const*);
}

std::ostream& Log::operator<<(char const* text){
  if (Log::isToWrite()) {
    printLevel();
    std::cout << text;
  }
  return std::cout;
}

Это только строка, но не число, почему?

Редактировать @bitmask Просто чтобычтобы быть понятным, вы имеете в виду реализовать так:

class Log{
  public:
    friend  Log& operator<<(Log& in, char const* text);
}

friend  Log& operator<<(Log& in, char const* text){
  if (in.isToWrite()) {
    in.printLevel();
    std::cout << text;
  }
  return std::cout;
}

Поскольку теперь я получаю их везде:

ошибка: семантическая проблема: недопустимые операнды для двоичного выражения ('Log' and 'const char [15] ')

Может быть, это действительно просто, но можете ли вы объяснить это для меня?
Я действительно не понимаю.

1 Ответ

1 голос
/ 02 апреля 2012

Поскольку вы вернули ostream&, следующий оператор << соответствует operator<<(ostream&, int).Вместо этого вы должны return *this; (тип Log&), чтобы следующий оператор << соответствовал оператору, определенному для вашего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...