C の領域では、テンプレート化された構造体またはクラスをフレンドとして宣言すると、構文関連の障害が発生する可能性があります。これを実現するには、次のアプローチを検討してください。
template <typename T> struct foo { template <typename> friend class foo; private: // ... };
この構文は正常にコンパイルされるようです。ただし、取得するテンプレート パラメータに関係なく、 foo のすべてのテンプレート インスタンス化を相互にフレンドとして宣言します。これは、意図したユースケースと一致する場合と一致しない場合があります。
フレンドシップを特定のインスタンス化のみに制限する必要がある場合は、次の構文を使用してこれを実現できます。
template <typename T> struct foo { template <typename S> friend struct foo<S>; private: // ... };
残念ながら、これは構文では、foo のすべての可能なインスタンス化を含む汎用宣言は許可されていません。
したがって、foo のテンプレートのインスタンス化すべてにわたって友情を確立することが目標の場合は、フレンド クラス foo を使用する 2 番目のアプローチが最も近い方法です。 C 構文の制約を考慮すると、取得できます。
以上がC でテンプレート構造体/クラスをフレンドとして宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。