上書き演算子<<拡張ストリーム操作について
この説明は、演算子のオーバーロードの課題を中心にしています<<
問題:
operator<< をオーバーロードするとき、my_stream などの iostream は簡単にプリミティブ型と文字列を出力できます。 my_stream 経由 << 10 <<; " heads"、my_stream << を使用して std::endl を出力しようとしています。終わり;
解決策: 関数ポインターを理解する
この問題を解決する鍵は、std::endl が関数であることを認識することにあります。 std::cout ストリームは演算子<<を利用します。 std::endl と同じシグネチャを持つ関数ポインターを受け入れます。この関数はその後呼び出され、その戻り値が転送されます。
MyStream のエンドライン操作のカスタマイズ
my_stream に対して同様の機能を実現するには、特殊な endl 関数を定義できます。次の署名を使用します:
typedef MyStream& endl(MyStream& stream)
この関数内で、追加のアクションや変更を実行できます。特定のストリーム実装に必要であり、std::endl の使用時に意図したとおりに動作することを保証します。
オーバーロード演算子<< std::endl を受け入れるには
my_stream が std::endl も受け入れられるようにするには、別の演算子<< を宣言します。次のシグネチャを使用します:
typedef std::basic_ostream> CoutType; typedef CoutType& (*StandardEndLine)(CoutType&); MyStream& operator<<(StandardEndLine manip) この演算子は、my_stream のカスタム endl 実装と互換性を持ちながら、標準出力ストリームで std::endl を呼び出し、std::cout の動作を模倣します。
以上が過負荷をかけるにはどうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。