問題タブ [friend]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vb.net - VB .NET で別のプロジェクトからプライベート関数を単体テストするにはどうすればよいですか?
コードを開発するとき、通常はプライベートであっても、クラスの構成要素の一部を単体テストしたいことがよくあります。単体テストがプロジェクト内にある場合、「Friend」を使用してこれを達成し、通常の使用のために関数をプライベートに保つことができます。しかし、NUnit テストを独自の別のプロジェクトに移動したいと考えています。求めている効果を得るにはどうすればよいですか?
c++ - 友達を宣言するときは、クラスキーを宣言する必要があります
このように友達を宣言すると、g++コンパイラはこのエラーで文句を言います。
それ以外の
classキーワードが必要なのはなぜですか?(Borland C ++コンパイラ、ところで、それを必要としません。)
コンパイラは単にシンボルテーブルでMyClassを検索し、それがクラスとして宣言されていることを通知できませんでしたか?(MyClassが宣言されていないときに文句を言うので、とにかくルックアップを行っていることは明らかです)
クラスの前方宣言を行っているわけではありません。それでも、上記のクラスを宣言するか、少なくとも前方宣言を行う必要があります。
それは私にとって理にかなっています(実際には素晴らしいでしょう)
必要に応じて前方宣言を行います。そうでない場合は、構文上の塩のように見えます。
私は、ほぼ20年間、コンパイラの苦情がなく、 classまたはstructキーワードのないfriendステートメントを楽しく使用してきました。これはかなり新しいものですか?
c++ - C ++のフレンドクラス/関数
重複の可能性:
C++ で「friend」を使用する必要があるのはいつですか?
ここSOでは、関数/クラスを別のクラスの友達にすることを推奨している人がたくさんいますが、他の選択肢があります。C++ では、friend を控えめに使用するべきではありませんか? フレンド機能の使用を決定する前に、他のオプションを検討する必要があると思います。意見/提案は大歓迎です。
c++ - 複数のテンプレート型が関係している場合、クラスと関数間のフレンド関係を狭めることができますか?
画像クラスを次のように表すとします。
画像の余分なコピーを防ぐために独自の swap 関数が必要になるため、Image のフレンドにする必要があります。画像内の場合、次のように記述します。
私は欲しいものを手に入れましたが、それはすべてのスワップ関数をすべての Image クラスの友達にします。したがって、次のように友人関係を絞り込むことができます。
C++ FAQ-lite 35.16で説明されているように。
ここで、浮動小数点または整数カーネルを使用できる畳み込み関数もあるとします。
Convolution は Image の raw メモリにアクセスする必要があるため、これも友人でなければなりません。ただし、convolve がすべての KernelValues のフレンドであるが、特定の Pixel タイプのみのフレンドになるように、フレンドシップを部分的に狭めたいと思います。
イメージ定義内。コンパイラは、これ (または他のバリアント) をまったく好まない。主な理由は、元の関数宣言と一致しないため、プライベート ポインターにアクセスできないためです。ここで私が欲しいものを手に入れることは可能ですか、それとも「より使いやすい」バージョンで解決する必要がありますか?
c++ - 親クラスがデータ クラスのフレンド クラスである別の派生クラスからデータ クラスのプライベート メンバー変数にアクセスする方法は?
私は3つのクラスを持っています:
Pimpl パターンを使用するデータ ホルダー クラス CDataHolder
/li>CDataHolder の iPImpl メンバーにアクセスする必要がある基本クラス CBase で、CDataHolder のフレンド クラスです。
/li>同じ iPimpl メンバーにもアクセスする必要がある、CBase から派生した派生クラス CD。ここで問題が発生します。派生クラスは、親クラスがフレンド クラスですが、iPimpl メンバーを使用できません。このような:
派生クラスはたくさんあるので、派生クラスごとに「friend class CDerivedXXX」という行を CDataHolder クラスに入れるのは得策ではありません。この問題を克服するにはどうすればよいですか?これを行うより良い方法はありますか?前もって感謝します。
c++ - テンプレート関数に友人 (のような) アクセスを許可する方法は?
次のコードを変更して、公開せずにテンプレート関数ask_runUI()
を使用できるようにするにはどうすればよいですか?s_EOF
s_EOF
c++ - テンプレート パラメータをフレンドにできないのはなぜですか?
(この回答に基づいて)質問への回答を調査するとき、私は次のことを試みました:
これは、次のエラーでコンパイルに失敗します:
エラー: テンプレート パラメーター "T" は、複雑な型指定子のフレンド クラス T では使用できません。
親友の Google から理解できることから、これは誤ってインスタンス化を試みないようにするためですがfriendly<int>
、テンプレートをコンパイルするときになぜこれがエラーになるのでしょうか? テンプレートを無効なタイプでインスタンス化するときにエラーになるべきではありませんか(私が書いたようなint f() { return T::foo(); }
)
c++ - フレンドキーワード(クラス/関数)はC++でカプセル化をどのように破りますか?
一部のプログラマーは、「フレンド関数が C++ のカプセル化を破る」と言いました。また、一部のプログラマーは、「フレンド関数はカプセル化を破ることはありません。代わりに、カプセル化の障壁を自然に拡張します」と述べています。
どういう意味ですか?..
フレンド関数が C++ でカプセル化を破る場合、どのように??