ホームページ >バックエンド開発 >C++ >オーバーロードする方法

オーバーロードする方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 05:54:10169ブラウズ

How to Overload the

演算子のオーバーロード<< std::endl

を処理する ストリーム挿入演算子 (operator<<) をオーバーロードする場合、std::endl を挿入引数として含めようとすると、一般的な問題が発生します。エラー「エラー C2678: バイナリ '

このエラーの根本的な理由は、std::endl が型ではなく関数であることです。これを克服するには、std::cout が std::endl をどのように処理するかを理解する必要があります。 std::cout は演算子<<を実装します。 std::endl と同じシグネチャを持つ関数ポインタを取得します。次に、関数を呼び出して戻り値を転送します。

この動作をエミュレートするには、追加の演算子を定義します

カスタム MyStreamManipulator シグネチャを持つ関数を受け取る MyStream クラス内の関数。この関数は、指定された関数を呼び出し、その戻り値を返します。

特に std::endl を処理するために、MyStreamManipulator シグネチャと一致する静的 MyStream::endl 関数を定義します。この関数内で、新しい行を出力し、バッファのフラッシュなどの追加のストリーム操作を実行します。

さらに、演算子<<を定義します。 std::cout で使用される StandardEndLine 関数シグネチャを受け入れる関数。この関数は、std::cout を引数として manip 関数を呼び出し、std::endl の挿入を可能にします。

これらの手順に従うことで、operator<< をオーバーロードできます。カスタム MyStream クラスで、ユーザー定義データと std::endl の挿入の両方を処理します。これにより、ストリーム操作を完全に制御できる std::cout の多用途な代替手段として MyStream を使用できるようになります。

以上がオーバーロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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