2012-06-05 37 views
1

我有一個複雜的對象,我希望能夠通過<<運算符將其傳遞到std::ostringstream,就像字符串或int。我想給ostringstream對象的唯一id(int)和/或name(string)。是否有我能在我的課程中實施的操作員或方法以使其工作?Stringstream - 將一個對象轉換爲字符串

+5

是的只是重載<<運算符 - 請參閱http://stackoverflow.com/questions/4421706/operator-overloading –

+1

獨特的id在什麼情況下?在正在運行的進程中,您可以使用它的內存地址。 – Ivarpoiss

+0

它們是「學生」對象,用於類項目。每個Student對象都有一個名稱,ID,地址和電話號碼,並且由一個txt文件構建而成。 –

回答

3

在相同的命名空間類中定義的運算符重載:

template<typename charT, typename traits> 
std::basic_ostream<charT, traits> & 
operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs) { 
    return lhs << rhs.id() << ' ' << rhs.name(); 
} 

如果輸出功能需要訪問類的私有成員,那麼你可以將它定義爲友元函數:

class Your_class { 
    int id; 
    string name; 

    template<typename charT, typename traits> 
    friend std::basic_ostream<charT, traits> & 
    operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs) { 
     return lhs << rhs.id << ' ' << rhs.name; 
    } 
}; 

請注意,這不會導致成員函數,它只是一種便捷的方式來一次聲明和定義一個好友函數。

+0

'traits'模板參數具有默認值,因此可以跳過。 – AlwaysLearning