簡體   English   中英

兩個班級與另一個 class 的成員 function 交朋友

[英]Two classes friending a member function from the other class

I've been trying to find a way to have two classes, where each class has a member function, and each member function is a friend of the other class.

為了顯示:

#include <iostream>

class A;

class B
{
    friend void A::func_A(); // compiler error: invalid use of incomplete type 'class A'
public:
    void func_B() { std::cout << "Function B\n"; }
};

class A
{
    friend void B::func_B();
public:
    void func_A() { std::cout << "Function A\n"; }
};

int main()
{
    A a;
    B b;
    
    a.func_A();
    b.func_B();
}

我明白為什么會這樣; A 僅被聲明且未定義,因此 B 不能成為其成員 function func_A()的朋友,因為它不知道它是什么。 為了讓 B 知道它的定義,class A 的定義必須高於 class B 的定義。 然后問題是相同的,除了它現在是 class A 無法訪問 B 的成員 function。

我的問題是是否有辦法解決這種循環依賴。 我知道 C++ 允許結交整個 class,這將解決此問題。 但是,據我所知,最好的做法是盡可能限制成員的可見性。

你可以做這樣的事情,雖然它可能不值得麻煩。

class B {
  friend class AccessorForAFuncA;
};

class A {
  void func_A();
};

class AccessorForAFuncA {
private:
  static void DoThingsWithPrivatePartsOf(B*);
  friend void A::func_A();
};

AccessorForAFuncA是一個幫助器 class ,它代表A::funcA訪問B的私有部分。 只有A::funcA被授予此間接訪問權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM