ホームページ  >  記事  >  バックエンド開発  >  C でテンプレート構造体/クラスをフレンドとして宣言するにはどうすればよいですか?

C でテンプレート構造体/クラスをフレンドとして宣言するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-07 08:38:02736ブラウズ

How to Declare Templated Structs/Classes as Friends in C  ?

テンプレート化された構造体/クラスをフレンドとして宣言する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。