の周りにラッパークラスを作成しています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 が渡されたかどうかを確認できます。ただし、何を達成したいのかを本当に知らなければ、より良いアプローチを提案するのは難しいですが、あなたがしていることは賢明ではないと思います。特定の(欠陥のある)解決策を達成する方法を尋ねるのではなく、目標が何であるかを説明する必要があると思います.