将setw与用户定义的ostream运算符一起使用

时间:2010-02-12 01:15:14

标签: c++ boost stream

如何使用我的用户定义的ostream运算符设置setw或类似的东西(boost格式?)? setw仅适用于推送到流的下一个元素。

例如:

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

myX的类型是X,我有自己的

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

2 个答案:

答案 0 :(得分:7)

确保将所有输出作为同一个operator<<调用的一部分发送到流中。实现此目的的直接方法是使用辅助ostringstream对象:

#include <sstream>

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

    ostringstream oss;
    oss << "(" << g.a() << ", " << g.b() << ")";
    return os << oss.str();
}  

答案 1 :(得分:1)

可能是这样使用width函数:

ostream& operator<<(ostream& os, const X &g) {
    int w = os.width();
    return os << "(" << setw(w) << g.a() << ", " << setw(w) << g.b() << ")";
}