friend
特定の名前空間内で定義されたすべての関数をクラスで作成する方法があるかどうか疑問に思っていましたか?
特に、次のようなクラスがあります。
class C {
private:
// ...
public:
// ...
friend C* B::f1(C*);
friend C* B::f2(C*);
friend C* B::f3(C*);
friend C* B::f4(C*);
friend C* B::f5(C*);
};
および名前空間B
は次のとおりです。
namespace B {
C* f1(C* x);
C* f2(C* x);
C* f3(C* x);
C* f4(C* x);
C* f5(C* x);
};
B
ここで、名前空間の 5 つの関数すべてをクラスとフレンドにするために、クラス定義に 5 行を記述することは避け、名前空間内で定義されたすべての関数がクラスとフレンドであること (つまり、そのプライベートにアクセスできること)C
をコンパイラに伝えるだけにしたいと思います。メンバー)。B
C
私が推測する簡単な修正は、名前空間をクラスに変更し、関数をその静的メンバーとして定義してから、クラスを classB
のフレンドとして宣言することC
です。しかし、好奇心から、名前空間でもそのようなことが可能かどうか疑問に思っていましたか?
前もって感謝します。