)(詰まりのRDBUFを再定義するために詰まらせ、ログファイルのそれの元RDBUF()にティーであることをどのように?

StackOverflow https://stackoverflow.com/questions/942399

  •  09-09-2019
  •  | 
  •  

質問

誰もがofstreamのオブジェクトの元のclog.rdbuf(へティーに加工されている代わりに(新しい関連RDBUFを持つ詰まりに内蔵されたC ++))とRDBUFを再定義する方法の例()を持っていディスク上のログファイルにます。

意図は、それがディスク上のログファイルにだけでなく、デフォルトの詰まり先の両方に行く持っているのstd ::はなく、全体で詰まらコード使用を持つことです。

感謝します。

-William

役に立ちましたか?

解決

カスタムstreambufの派生クラスを記述する必要があります。それはあなたのofstreamののRDBUFし、元の詰まりRDBUFの両方ににデータを吐き出す必要があります。

カスタムたstreambufを書くの一般的な例:

http://www.dreamincode.net/code/snippet2499.htmする

次のように

新しいストリームバッファを隠しておく行うことができます:

// grab buffer for clog
std::streambuf* oldClogBuf = std::clog.rdbuf();

// create custom buffer which feeds both clog and an ofstream
CustomBuffer* customBuf = new CustomBuffer( oldClogBuf );

// stash custom buffer
std::clog.rdbuf( customBuf );

...do stuff...

// restore original clog buffer
std::clog.rdbuf( oldClogBuf );

あなたは、バッファの切り替えを管理するために、RAIIイディオムを使用することによって、全体のことをより強固にすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top