2010-02-12 28 views
5

Làm cách nào để làm cho setw hoặc một cái gì đó tương tự (định dạng tăng?) Hoạt động với các toán tử ostream do người dùng xác định của tôi? setw chỉ áp dụng cho phần tử tiếp theo được đẩy tới luồng.sử dụng setw với các nhà khai thác luồng do người dùng xác định

Ví dụ:

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

nơi Myx là loại X, và tôi phải của riêng tôi

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

Trả lời

7

Chỉ cần chắc chắc chắn rằng tất cả đầu ra của bạn được gửi đến luồng như một phần của cùng một cuộc gọi đến operator<<. Một cách đơn giản để đạt được điều này là sử dụng đối tượng phụ trợ ostringstream:

#include <sstream> 

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

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

có lẽ như vậy bằng cách sử dụng width chức năng:

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

Bằng cách này tổng chiều rộng là 3 lần và có quá nhiều khoảng trắng giữa các mục riêng lẻ. – Manuel

+0

Với os.width(), bạn có thể tự sửa chữa nó. – shoosh

Các vấn đề liên quan