の周りにラッパークラスを作成していますstd::ofstream。すべてのstd::ofstreamメソッドをオーバーライドしました。ここで、メソッドをオーバーライドして、 のstd::endl代わりにラッパー クラスを使用する必要がありますbasic_ostream。
std::endlメソッドをオーバーライドすることは可能ですか? 誰かが私に例を挙げてもらえますか?
の周りにラッパークラスを作成していますstd::ofstream。すべてのstd::ofstreamメソッドをオーバーライドしました。ここで、メソッドをオーバーライドして、 のstd::endl代わりにラッパー クラスを使用する必要がありますbasic_ostream。
std::endlメソッドをオーバーライドすることは可能ですか? 誰かが私に例を挙げてもらえますか?
::stdまず、名前空間で関数をオーバーロードすることは決して許可されていません。実際、名前空間内の既存のテンプレートを特殊化することだけ::stdが許可されており、それには制限があります。
endlただし、C++11 27.7.3.8/1 で実際に行われていることを読むことで、この状況に対処できます。
効果: os.put(os.widen('\n')) を呼び出し、次に os.flush() を呼び出します。
したがって、何もオーバーライドする必要はありません。この一連のput、widenおよびを処理するための正しいメンバー関数を提供するだけflushです。
operator<<のタイプをオーバーライドしてstd::endlから、オーバーロード内で std::endl が渡されたかどうかを確認できます。ただし、何を達成したいのかを本当に知らなければ、より良いアプローチを提案するのは難しいですが、あなたがしていることは賢明ではないと思います。特定の(欠陥のある)解決策を達成する方法を尋ねるのではなく、目標が何であるかを説明する必要があると思います.