2017-08-08 72 views
0

basic_ostream我想知道我怎麼能在一個std插入參數:: basic_ostream 我一直很努力,但我不能的std ::帶參數

我需要插入一個參數來選擇哪些從芒值我想打印 我一旦參數插入的下一個步驟是容易的,因爲它僅僅是一個if條件

template <typename charT> 
friend std::basic_ostream<charT> &operator << (
    std::basic_ostream<charT>& out, Familia &familia 
    ) { 
    out << "\t Relaciones\n"; 
    for (Vertice<cedula, relacion> &vertice : familia) { 
     int per = vertice.getFuente(); 
     for (Arista<cedula, relacion> &arista : vertice) { 
      out << per << "->"; 
      out << arista.getDestino() << " es" << " " << arista.getValor() << "\n"; 
     } 
    } 
    return out; 
} 
+0

目前還不清楚是什麼你問。你似乎插入到ostream中就好了。你有錯誤嗎?確切的問題是什麼? – bolov

+2

也許創建一個過濾函數返回只包含您所需要的信息的'Familia'對象的實例?或者你可以看到[標準機械臂(http://en.cppreference.com/w/cpp/io/manip)例如像['setw'](http://en.cppreference.com/w/cpp/io/manip/setw)的作品,並基於該模型的解決方案? –

+0

哦,現在我明白了。在這裏,看看這些:https://stackoverflow.com/questions/799599/c-custom-stream-manipulator-that-c​​hanges-next-item-on-stream,https://stackoverflow.com/questions/ 15053753 /寫-A-操縱換一個定製流一流,https://stackoverflow.com/questions/1328568/custom-stream-manipulator-for-class – bolov

回答

2

有些情況下,你可以添加自定義行爲狀態,以標準的方式通過流操縱器實現流類。

但我個人覺得這是太多的開銷。我的建議是,你定義一個新類型,它接受的參數和Familia引用,然後進行打印:

class FormattedFamilia { 
    Familia const& _to_print; 
    int _parameter; 
public: 
    FormattedFamilia(int parameter, Familia const& to_print) 
    : _parameter(parameter), _to_print(to_print) 
    {} 

    template <typename charT> 
    friend std::basic_ostream<charT> &operator << (
    std::basic_ostream<charT>& out, FormattedFamilia const & ff 
) { 
    if(_parameter > 0) { 
     // do printing using out. 
    } 
    } 
}; 

它必須是一個朋友類課程的Familia。並使用它會是這樣簡單:

cout << FormattedFamilia(7, familia);