标准::basic_ostream参数

std::basic_ostream with parameter

本文关键字:参数 ostream basic 标准      更新时间:2023-10-16

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

我需要插入一个参数来选择要从 arista 中打印哪些值 插入参数后,下一步很容易,因为它只是一个 if 条件

template <typename charT>
friend std::basic_ostream<charT> &operator << (
std::basic_ostream<charT>& out, Familia &familia
) {
out << "t Relacionesn";
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;
}

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

但我个人觉得这太过头了。我的建议是定义一个新类型,该类型接受参数和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);