Как я делаю setw, или что-то подобное (повысьте формат?) работают с моими пользовательскими ostream операторами? setw только относится к следующему элементу, продвинутому потоку.
Например:
cout << " approx: " << setw(10) << myX;
где myX имеет тип X, и у меня есть свое собственное
ostream& operator<<(ostream& os, const X &g) {
return os << "(" << g.a() << ", " << g.b() << ")";
}
Просто убедитесь, что весь ваш вывод отправляется в поток как часть того же вызова operator <<
. Самый простой способ добиться этого - использовать вспомогательный объект ostringstream
:
#include <sstream>
ostream& operator<<(ostream& os, const X & g) {
ostringstream oss;
oss << "(" << g.a() << ", " << g.b() << ")";
return os << oss.str();
}
может быть так, используя функцию width :
ostream& operator<<(ostream& os, const X &g) {
int w = os.width();
return os << "(" << setw(w) << g.a() << ", " << setw(w) << g.b() << ")";
}