2011-07-21 15 views
5

Gdybym miał prostą klasę z dwoma zmiennymi X i Y oraz toString() funkcja, która zwraca sformatowany ciąg z danymi. Kiedy zadzwonię pod numerC++ Format cout << Automatycznie

cout << simpleClass << "\n"; 

ktoś wie, w jaki sposób mógłbym automatycznie wywołać simpleClass.ToString, aby zwrócić poprawnie sformatowany ciąg znaków? Zgaduję, że jest sposób, aby to zrobić z funkcjami operatora, ale nie wiem, jak bym to zrobił.

Odpowiedz

9

Jeśli pytasz jak zdefiniować taki operator,

template<class CharT, class TraitsT> 
std::basic_ostream<CharT, TraitsT>& 
operator <<(std::basic_ostream<CharT, TraitsT>& os, SimpleClass const& sc) 
{ 
    return os << sc.ToString(); 
} 
+4

+1: Lubię, jak realizowane funkcję, która działa na wszystkich 'obiektów basic_ostream', nie tylko' cout' –

+0

@Ken: Zbyt wiele osób zapomina o szerokich strumieni. - [ – ildjarn

+0

+1 i cookie –

2

zdefiniować

std::ostream& operator <<(std::ostream&, const SimpleClass&) 

zadzwonić ToString(), przekazując ostream& i zwróci ostream&.