「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ でテンプレート化された構造体/クラスをフレンドとして宣言するにはどうすればよいですか?

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

2024 年 11 月 19 日に公開
ブラウズ:952

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

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

C の領域では、テンプレート化された構造体またはクラスをフレンドとして宣言すると、構文関連の障害が発生する可能性があります。これを実現するには、次のアプローチを検討してください:

template 
struct foo
{
    template 
    friend class foo;

private:
    // ...
};

この構文は正常にコンパイルされるようです。ただし、取得するテンプレート パラメータに関係なく、 foo のすべてのテンプレート インスタンス化を相互にフレンドとして宣言します。これは、意図した使用例と一致する場合と一致しない場合があります。

友情を特定のインスタンス化のみに制限する必要がある場合は、次の構文を使用してこれを実現できます:

template 
struct foo
{
    template 
    friend struct foo;

private:
    // ...
};

残念ながら、この構文では foo のすべての可能なインスタンス化を含む汎用宣言は許可されません。

したがって、foo のすべてのテンプレートのインスタンス化にわたって友情を確立することが目標の場合は、 C 構文の制約を考慮すると、フレンド クラス foo を使用する 2 番目のアプローチが最も近い方法です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3