2010-02-12 52 views
5

如何使setw或類似的東西(boost格式?)與我的用戶定義的ostream運算符一起工作? setw僅適用於推送到流中的下一個元素。使用setw與用戶定義的ostream運算符

例如:

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

其中MYX是X型的,我有我自己的

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

回答

7

只是要確保所有的輸出都作爲與operator<<相同的呼叫的一部分發送到流。一個直接的方法來實現,這是使用輔助ostringstream對象:

#include <sstream> 

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

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

也許像這樣使用width功能:

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

這種方式,總寬度爲3倍w和存在個別項目之間太多的空白。 – Manuel 2010-02-12 07:39:25

+0

用os.width()你應該可以自己修復它。 – shoosh 2010-02-12 23:15:55