【问题标题】:std::basic_ostream with parameter带参数的 std::basic_ostream
【发布时间】:2017-08-08 07:26:30
【问题描述】:

我想知道如何在 std::basic_ostream 中插入参数 我一直在努力,但我做不到

我需要插入一个参数来选择要打印的 arista 中的哪些值 一旦我插入了参数,下一步就很容易了,因为它只是一个 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;
}

【问题讨论】:

标签: c++ io stream


【解决方案1】:

您可以通过多种方式通过流操纵器将自定义行为状态添加到标准流类中。

但是我个人觉得这开销太大了。我建议你定义一个接受参数和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);

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 2014-08-27
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多