2012-02-23 17 views
0

私はC++ 03であり、ちょうどC++に近づき始めました。インライン関数内でのデフォルト値としてのstringstreamの使用

私は文字列ストリーム上のいくつかのプロパティを設定する機能を作成し、それを返す(または参照で渡しmayebe)したい

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

ので、私は呼び出す場合:

stringstream ss = get_fixed_stream() 

I私は

COUT = get_fixed_stream(COUT)

呼び出す場合、新しいstrinstringをrecive精度と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 
+1

。これは動作しません、ストリームはコピー不可能です。エラーメッセージがあなたに伝えていることです:ストリームクラスのコピーコンストラクタはプライベートです。 – jrok

答えて

3

std::coutはにstringstreamではなく、1として渡すことはできません。

ではなく

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); 
+0

+1、私はすべてのstd :: ios_baseタイプに対して(少なくとも)動作するので、このアプローチが好きです。 –

+0

@AlexP。それは、モルの丘のための少しのマレットです、私は確かに、ほとんどの場合、すべてのビットは良いビットとしてOstreamベースをキャプチャしますが、これはそのインターフェイスでコンパイルするもので動作します。 – 111111

1

Iを基準(以下&)を使用することをお勧めこれを試してください:あなたは値によって、ストリームを返すようにしようとしている

inline stringstream & get_fixed_stream(stringstream & ss) 
{ 
ss.precision(4); 
ss.setf(ios::fixed); 
return ss; 
} 
関連する問題