2010-12-18 18 views
2

ostreamにプレフィックスを追加し、他の機能に渡してプレフィックスを出力し、それを削除して続行する方法を探しています。ostream出力にプレフィックスを追加する

次の擬似コードチェック:

彼らは歩哨が接頭辞/接尾辞のために使用されるかもしれないと述べているが、私にはないのostreamのドキュメントを見てみると
... 
Whatever 
function: output 1 
function: output 2 
... 

:のような出力で

... 
void function(ostream &out){ 
    out << "output 1\n"; 
    out << "output 2\n"; 
} 

cout << "Whatever\n"; 
add_suffix(cout,"function: "); 
function(cout); 
remove_suffix(cout); 
... 

を意図された使用が私が望むものなら、これを行う方法を知っている。

ostream::sentryドキュメントは言う:

sentry: Perform exception safe prefix/suffix operations 

答えて

4

一般的な方法は、次のようなものです。それに書かれている任意の改行の後に接頭辞を挿入し、宛先バッファに出力を送信streambufあるYourStreamBufferの定義します。次に、このように使用してください:

ストリームバッファを実装する方法については、ネット上で豊富な例があります。 また、コードが例外安全であること、つまり例外がスローされてもoldBufを復元することを確認してください。

注:センチリストは異なるものですが、ここで必要なものではありません。

+0

私は知っていますstreambufsそれは私の元のアイデアだった、私はちょうどなぜそのようなことをしない場合、崇拝隊が文書化されているのだろうかと思っていた。 –

+1

@Arkaitz: "接頭辞"は、ストリームに読み書きする関数のプレフィックスがあることを示します。ストリームの状態をチェックし、ストリームが悪い状態になったときに例外をスローするためのものです。 – ybungalobill

+0

クールなので、ストリームコンテキストの接頭辞と接尾辞の操作は、私が望むものとあまりにも似ていました。ストリームビルの実装と結びついていると思います。 –

0

また、あなたは、このために邪悪なマクロを使用することができます。..

#define f_str(str) str << __FUNCTION__ << ' ' 

(はい、__FUNCTION__はどこでも定義されていませんが、ちょっと...)Negtiveはあなたがラップするマクロを使用する必要がありますそれは、すべての連鎖操作で一度だけ名前を挿入するということです(ストリームバッファの場合は、すべての改行に接頭辞が付きます)。

関連する問題