1

フレンド関数を使用して次のことを達成する方法について少し混乱しています。

メンバ関数 'f' がクラス B のフレンドとして宣言されるクラス A があるとします。

私が理解しているように、通常の解決策はこれです:

定義されていないと宣言されている 'f' のみでクラス A を定義します。

'f' のフレンド宣言を含むクラス B を定義します。

「f」を定義する

ここで、クラス A に、クラス型 B のデータ メンバー、または vector < B > のような B 型要素のコンテナーがあるとしたらどうでしょう。

クラス B の前方宣言は機能しているように見えます (つまり、コンパイラの警告/エラーはありません) が、C++11 標準に従って合法であるかどうかはわかりません。また、このようなソリューションでは、クラス B のコンストラクターを使用して、A のクラス B 型メンバーにクラス内イニシャライザーを提供することはできません。C++11 に準拠してこれらすべてを達成するための最良の方法は何でしょうか? ?

標準自体から解決策を見つけようとしましたが、そのようなシナリオについての言及は見つかりませんでした。どなたか指摘していただけると嬉しいです。

PS私は本当に初心者なので、回答で別のことを想定しないでください。詳細な回答は気にしません:)

4

1 に答える 1

0

この問題に関する MSDN の記事を読む必要があります: Class Member Functions and Classes as Friends

基本的にあなたがする必要があるのはA、関数を持つクラス型を持ち、それからあなたの友達になる関数が存在することf()をクラス型で宣言することです。BA::f()

MSDN の例は、これをよく示しています。

class A {
public:
   int Func1( B& b );

private:
   int Func2( B& b );
};

class B {
private:
   int _b;

   // A::Func1 is a friend function to class B
   // so A::Func1 has access to all members of B
   friend int A::Func1( B& );
};

int A::Func1( B& b ) { return b._b; }   // OK
int A::Func2( B& b ) { return b._b; }   // C2248
于 2013-03-16T15:03:53.070 に答える