フレンド宣言としてのテンプレート化されたクラスまたは構造体
テンプレート化された構造体またはクラスをフレンドとして宣言しようとすると、コンパイル エラーが発生する可能性があります。たとえば、次のコードについて考えてみましょう。
template <typename T> struct foo { template <typename S> friend struct foo<S>; private: // ... };
このコードはコンパイルに失敗し、複数のテンプレート パラメーター リストが許可されていないことを示すエラー メッセージが表示されます。ただし、foo テンプレート構造体のすべての可能なインスタンス化を foo
解決策
これを実現するには、次の宣言を使用できます。
template <typename> friend class foo
この宣言は、 を意味します。 foo クラスのすべての テンプレート インスタンス化は、foo クラスの他の すべて 個のテンプレート インスタンス化の友達になります。
補足
宣言
template <typename> friend struct foo;
も機能しますが、foo 構造体のすべてのテンプレートのインスタンス化が互いに友達になります。これはおそらく意図した動作です。ただし、フレンド宣言とテンプレートの構文はやや複雑であることに注意してください。
以上がテンプレート化されたクラスまたは構造体をフレンドとして宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。