C ++ перегрузка << оператор - PullRequest
1 голос
/ 06 ноября 2010

Мне нужно перегрузить оператор << для потоков, чтобы работать со встроенными типами.Для строк это не проблема, так как я просто перегружаю функцию следующим образом: </p>

ostream& operator<<(ostream& os, const char* str) { /*...*/ }

Это работает, потому что эта функция глобальная, а не член.Проблема в том, что мне нужно перегрузить оператор << для других примитивных типов (целые числа, числа с плавающей запятой и т. Д.), Но это функции-члены.Есть ли способ, которым я могу сделать это?Мне нужно, чтобы он работал не только с cout, но и с другими потоками.Заранее спасибо. </p>

Ответы [ 2 ]

6 голосов
/ 06 ноября 2010

Вы не должны пытаться изменить то, что делает оператор в std::cout << 3;. Это часть стандартного API. Если вам нужно вывести в каком-то формате, который потоковые манипуляторы не могут поддерживать, например, вы можете написать небольшую оболочку:

struct MyFormatter {
    MyFormatter (ostream &o) : o(o) {}
    ostream &o;
};

MyFormatter &operator<<(MyFormatter &mf, int i) {
    mf.o << "int(" << i << ")"; // or whatever
    return mf;
}

Тогда используйте это так:

MyFormatter mf(std::cout);
mf << 1 << "," << 2 << "," << 3;
3 голосов
/ 06 ноября 2010

В C ++ для перегрузок операторов требуется как минимум один операнд типа «тип» или тип перечисления.
Дело в том, что вам не разрешено перегрузить оператор для примитивных типов.
http://www.parashift.com/c++-faq-lite/intrinsic-types.html#faq-26.10

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