的std ::带参数
问题描述:
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;
}
答
有些情况下,你可以添加自定义行为和状态,以标准的方式通过流操纵器实现流类。
但我个人觉得这是太多的开销。我的建议是,你定义一个新类型,它接受的参数和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);
目前还不清楚是什么你问。你似乎插入到ostream中就好了。你有错误吗?确切的问题是什么? – bolov
也许创建一个过滤函数返回只包含您所需要的信息的'Familia'对象的实例?或者你可以看到[标准机械臂(http://en.cppreference.com/w/cpp/io/manip)例如像['setw'](http://en.cppreference.com/w/cpp/io/manip/setw)的作品,并基于该模型的解决方案? –
哦,现在我明白了。在这里,看看这些:https://stackoverflow.com/questions/799599/c-custom-stream-manipulator-that-changes-next-item-on-stream,https://stackoverflow.com/questions/ 15053753 /写-A-操纵换一个定制流一流,https://stackoverflow.com/questions/1328568/custom-stream-manipulator-for-class – bolov