2010-04-27 36 views
3

我有一個結構,我想用'std :: cout'或其他輸出流輸出。 這可能沒有使用類?用結構(無類)重載「<<」cout風格

感謝

#include <iostream> 
#include <fstream> 
template <typename T> 
struct point{ 
    T x; 
    T y; 
}; 

template <typename T> 
std::ostream& dump(std::ostream &o,point<T> p) const{ 
    o<<"x: " << p.x <<"\ty: " << p.y <<std::endl; 
} 


template<typename T> 
std::ostream& operator << (std::ostream &o,const point<T> &a){ 
    return dump(o,a); 
} 


int main(){ 
    point<double> p; 
    p.x=0.1; 
    p.y=0.3; 
    dump(std::cout,p); 
    std::cout << p ;//how? 
    return 0; 
} 

我嘗試不同的語法」,但我似乎無法使它發揮作用。

+4

值得注意的是,「不使用類」在這種情況下不是特別有用的限定詞。結構和類之間沒有功能差異,除了結構默認爲公共成員/繼承,而類默認是私有的。 – 2010-04-27 07:10:03

回答

9

也許這是一個複製粘貼錯誤,但只有一些錯誤的東西。首先,自由函數不能是const,但你已經標記爲dump。第二個錯誤是dump沒有返回值,這也很容易解決。修復這些,它應該工作:

template <typename T> // note, might as well take p as const-reference 
std::ostream& dump(std::ostream &o, const point<T>& p) 
{ 
    return o << "x: " << p.x << "\ty: " << p.y << std::endl; 
} 
+0

謝謝,我確實是從早期的課上覆制粘貼 – monkeyking 2010-04-27 06:39:38

+0

第三個是要轉儲的地方沒有標記爲const。 GMan也解決了這個問題。 – sbi 2010-04-27 06:50:00

7

對於所有意圖和目的,結構類在C++中,除了其成員默認爲公開,而不是私人的。由於優化,可能會存在次要實現差異,但這些差異對標準功能沒有影響,對於C++中的類和結構,這些功能是相同的。

其次,爲什麼要有「轉儲」功能 - 直接在流操作符中實現它。

template<typename T> 
std::ostream& operator << (std::ostream &o, const point<T> &a) 
    { 
    o << "x: " << a.x << "\ty: " << a.y << std::endl; 
    return o; 
    }