在内联函数中使用stringstream作为默认值

时间:2012-02-23 15:40:03

标签: c++ cout stringstream

我在c ++ 03上,我刚开始接近c ++。

我想创建一个函数,在字符串流上设置一些属性并返回它(或者可以通过引用传递它)

inline stringstream get_fixed_stream(stringstream ss=stringstream("")) {
    ss.precision(4);
    ss.setf(ios::fixed);
    return ss;
}

所以,如果我打电话:

stringstream ss = get_fixed_stream()
如果我打电话

,我会收到一个新的strinstring

cout = get_fixed_stream(cout)

精度和setf设置为cout。

我收到此错误:

/usr/include/c++/4.4/streambuf:770: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
/usr/include/c++/4.4/iosfwd:63: error: within this context

2 个答案:

答案 0 :(得分:3)

std::cout不是字符串流,不能作为一个字符串传入。

试试这个

template<typename Stream>
void fix_stream(Stream& stream){ 
    stream.precision(4);
    stream.setf(std::ios::fixed);
}
:::
fix_stream(std::cout);
std::stringstream ss;
fix_stream(ss);

答案 1 :(得分:1)

我建议使用引用(下面的&amp; ):

inline stringstream & get_fixed_stream(stringstream & ss)
{
ss.precision(4);
ss.setf(ios::fixed);
return ss;
}