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

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

Linda Hamilton
リリース: 2024-11-07 17:40:03
オリジナル
943 人が閲覧しました

How Can You Declare Templated Structs/Classes as Friends in C  ?

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

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート