整个运算符的std :: setw<<用户定义的类型

时间:2017-10-17 11:58:20

标签: c++ iostream setw

我们知道,std :: setw()仅影响下一个输出。

那么,什么是标准练习来对齐 整个运算符<<表输出中的用户定义类型

class A
{
    int i, j;
public:
    friend ostream& opeartor<<(ostream& out, const A& a) { 
          return << "Data: [" << i << ", " << j << "]";
    }
}

// ...
A[] as;
out << std::left;
for (unsigned i = 0; i < n; ++i)
     out << std::setw(4)  << i
         << std::setw(20) << as[i]  // !!!
         << std::setw(20) << some_strings[i]
         << some_other_classes[i] << std::endl;
out << std::right;

1 个答案:

答案 0 :(得分:0)

只需在您的班级中添加setw()方法:

class A
{
    int i, j;
    mutable int width = -1;

public:
    A& setw(int n) {
        this->width = n;
        return *this;
    }

    friend ostream& operator<<(ostream& out, const A& a);
};

当你打印它时,如果你想对齐,只需使用它:

int main() {
    A as[5];
    for (auto & a : as)
        cout << a.setw(15) << endl;
}