テンプレート化された構造体/クラスをフレンドとして宣言する
C では、テンプレート化された構造体またはクラスを他のテンプレート化された構造体のフレンドとして宣言するときに困難に直面することがあります。またはクラス。次のシナリオを考えてみましょう:
template <typename T> struct foo { template <typename S> friend struct foo<S>; private: // ... };
このコードを Visual C 8 でコンパイルすると、エラー C3857: 「複数のテンプレート パラメーター リストは許可されていません。」が発生する可能性があります。これは、コンパイラがフレンド宣言内のネストされたテンプレート宣言を処理できないために発生します。
この問題を解決するには、簡略化された構文を利用できます。
template <typename> friend class foo;
この構文は、次のすべてのインスタンスを宣言します。テンプレート化された構造体 foo は、それを囲んでいる foo テンプレートの友達として使用されます。これにより、foo の可能なすべてのインスタンス化を相互にフレンドにするという意図された目標が効果的に達成されます。
このアプローチは、特定のテンプレート引数に関係なく、すべてのテンプレートを相互にフレンドにするという点で元の宣言とは異なることに注意してください。 。これは、特定の要件に応じて、望ましい動作である場合とそうでない場合があります。
以上がC でテンプレート構造体/クラスをフレンドとして宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。