コールバック関数を実行する方法はありますか、またはデータがまたはなどの標準ストリームに書き込まれるたびに事前定義された関数を呼び出す方法はありますstderrかstdout?理想的には、これを使用して、アプリケーションが他のストリームprintfの場合stdoutまたはfprintf他のFILEストリームに対して通常どおりに出力し、現在の設定に応じてアサートなどの追加タスクを条件付きで実行できるようにすることができます。これには、他のライブラリがストリームに出力するときに、このエラー処理コードを自動的にトリガーするという利点があります。
を使用して、出力を他のハンドルstderrにstdoutリダイレクトできることを知っています。この動作を提供する代替ストリームを実装することは実用的ですか、それとも多くの標準ライブラリ関数を再実装する必要がありますか?FILEstd::freopenFILE
標準に準拠したC++の提案(C ++ 11を含む)が推奨されますが、必要に応じてWindowsのみのソリューションを利用できます。
それ以来、James KanzeによるStreambufsのフィルタリングの助けを借りて、doomsterによって提案されたようにstreambufferを実装しようと試みました。他の提案が出てこない限り、これが元の提案に最も近いようです。Cスタイルの出力をインターセプトすることはありません。これは、不可能または非現実的であると思われますが、それ以外の場合は、必要なすべての機能を提供します。