テンプレート クラスの山括弧演算子のオーバーロード
<< をオーバーロードしようとしています。演算子をテンプレート クラス ペアのフレンドとして使用すると、非テンプレート関数宣言を示すコンパイラ警告が表示される場合があります。この問題は、フレンド宣言と実際の関数定義の不一致が原因で発生します。
これを解決するには、フレンド宣言が特定のテンプレート引数を持つテンプレート クラス ペアの特殊なインスタンスに適用されるように指定する必要があります。これは、空の山括弧 <> を使用することで実現されます。
修正されたコードは次のようになります。
<code class="cpp">template <class T, class U> class Pair { public: Pair(T v1, U v2) : val1(v1), val2(v2) {} ~Pair() {} Pair& operator=(const Pair&); friend ostream& operator<<<> (ostream&, Pair<T, U>&); private: T val1; U val2; };</code>
さらに、オーバーロードされた演算子の関数定義は、次のようにテンプレート クラス定義の前に宣言する必要があります。
<code class="cpp">template <class T, class U> ostream& operator<<<> (ostream& out, Pair<T, U>& v); template <class T, class U> class Pair { // ... };</code>
これらの変更を行うことにより、コンパイラは、フレンド関数をペア テンプレートの特殊化として正しく識別し、非テンプレート関数宣言に関する警告を回避できます。
以上がテンプレート クラスの山括弧演算子を適切にオーバーロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。