ホームページ >バックエンド開発 >C++ >過負荷をかけるにはどうすればよいですか

過負荷をかけるにはどうすればよいですか

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 02:01:10258ブラウズ

How Can I Overload the

上書き演算子<<拡張ストリーム操作について

この説明は、演算子のオーバーロードの課題を中心にしています<<

問題:

operator<< をオーバーロードするとき、my_stream などの iostream は簡単にプリミティブ型と文字列を出力できます。 my_stream 経由 << 10 <<; " heads"、my_stream << を使用して std::endl を出力しようとしています。終わり;

解決策: 関数ポインターを理解する

この問題を解決する鍵は、std::endl が関数であることを認識することにあります。 std::cout ストリームは演算子<<を利用します。 std::endl と同じシグネチャを持つ関数ポインターを受け入れます。この関数はその後呼び出され、その戻り値が転送されます。

MyStream のエンドライン操作のカスタマイズ

my_stream に対して同様の機能を実現するには、特殊な endl 関数を定義できます。次の署名を使用します:

typedef MyStream&amp; endl(MyStream&amp; 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。