использование setw с определенными пользователем операторами ostream - PullRequest
5 голосов
/ 12 февраля 2010

Как мне заставить setw или что-то подобное (повысить формат?) Работать с моими пользовательскими операторами ostream? setw применяется только к следующему элементу, помещаемому в поток.

Например:

cout << "    approx: " << setw(10) << myX;

, где myX относится к типу X, а у меня есть свой

ostream& operator<<(ostream& os, const X &g) {
    return os << "(" << g.a() << ", " << g.b() << ")";
}

Ответы [ 2 ]

7 голосов
/ 12 февраля 2010

Просто убедитесь, что все ваши выходные данные отправляются в поток как часть одного и того же вызова на operator<<. Простой способ добиться этого - использовать вспомогательный объект ostringstream:

#include <sstream>

ostream& operator<<(ostream& os, const X & g) {

    ostringstream oss;
    oss << "(" << g.a() << ", " << g.b() << ")";
    return os << oss.str();
}  
1 голос
/ 12 февраля 2010

может быть так, используя функцию width :

ostream& operator<<(ostream& os, const X &g) {
    int w = os.width();
    return os << "(" << setw(w) << g.a() << ", " << setw(w) << g.b() << ")";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...