2017-08-08 65 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);