プログラミングでは、カスタム データ型またはクラスと対話するために特定の演算子をオーバーロードする必要がある状況に遭遇することがあります。この質問では、<< をオーバーロードしようとしたときに発生する問題について説明します。
提供されたコード スニペットは、2 つの型パラメーター T および U を持つテンプレート クラスのペアを宣言します。このクラス内で、<< を宣言しようとしています。演算子は、ostream とペア インスタンスをパラメータとして受け取るフレンド関数として使用されます。ただし、コンパイラは、演算子のテンプレート関数のその後の定義にもかかわらず、非テンプレート関数の宣言に関する警告を生成します。
この問題を解決するには、正しい構文は、< のテンプレート インスタンスを特殊化することです。 ;<一般的なフレンド関数として宣言するのではなく、演算子を使用します。これは、宣言を次のように変更することで実現できます。
friend ostream& operator<<<> (ostream&, Pair&);
この宣言は、<< の特殊なテンプレート インスタンスを指定します。演算子は、型パラメーター T および U を使用して、Pair クラスに対して定義されます。これは、これが特殊化であり、一般的な宣言ではないことを明示的に示しています。
さらに、コンパイラーは <...> を追加することを推奨しています。この場合、コンパイラは定義内のテンプレート引数から型パラメータを推測できるため、フレンド宣言内の関数名の後ろは不要です。
これらの調整を行うことで、コードは正常にコンパイルされます。テンプレートで演算子をオーバーロードする場合は、変更された宣言に示すように、特殊化するテンプレート インスタンスを明示的に指定する必要があることに注意してください。
以上が` をオーバーロードするにはどうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。