2

の周りにラッパークラスを作成していますstd::ofstream。すべてのstd::ofstreamメソッドをオーバーライドしました。ここで、メソッドをオーバーライドして、 のstd::endl代わりにラッパー クラスを使用する必要がありますbasic_ostream

std::endlメソッドをオーバーライドすることは可能ですか? 誰かが私に例を挙げてもらえますか?

4

2 に答える 2

3

::stdまず、名前空間で関数をオーバーロードすることは決して許可されていません。実際、名前空間内の既存のテンプレートを特殊化することだけ::stdが許可されており、それには制限があります。

endlただし、C++11 27.7.3.8/1 で実際に行われていることを読むことで、この状況に対処できます。

効果: os.put(os.widen('\n')) を呼び出し、次に os.flush() を呼び出します。

したがって、何もオーバーライドする必要はありません。この一連のputwidenおよびを処理するための正しいメンバー関数を提供するだけflushです。

于 2013-05-21T18:43:02.880 に答える
1

operator<<のタイプをオーバーライドしてstd::endlから、オーバーロード内で std::endl が渡されたかどうかを確認できます。ただし、何を達成したいのかを本当に知らなければ、より良いアプローチを提案するのは難しいですが、あなたがしていることは賢明ではないと思います。特定の(欠陥のある)解決策を達成する方法を尋ねるのではなく、目標が何であるかを説明する必要があると思います.

于 2013-05-21T19:37:00.427 に答える