gpt4 book ai didi

c++ - 两个类与另一个类的成员函数交 friend

转载 作者:行者123 更新时间:2023-12-04 07:30:40 26 4
gpt4 key购买 nike

我一直在尝试找到一种方法来拥有两个类,每个类都有一个成员函数,每个成员函数都是另一个类的 friend 。
为了显示:

#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 不能成为它的成员函数 func_A()因为它不知道它是什么。为了让 B 知道它的定义,A 类的定义必须高于 B 类的定义。那么问题是一样的,只是现在的类 A 无法访问 B 的成员函数。
我的问题是是否有办法解决这种循环依赖。我知道 C++ 允许整个类的交友,这将解决这个问题。但是,据我所知,最好的做法是尽可能限制成员的可见性。

最佳答案

你可以做这样的事情,虽然它可能不值得麻烦。

class B {
friend class AccessorForAFuncA;
};

class A {
void func_A();
};

class AccessorForAFuncA {
private:
static void DoThingsWithPrivatePartsOf(B*);
friend void A::func_A();
};
AccessorForAFuncA是一个辅助类,它访问 B 的私有(private)部分代表 A::funcA .仅限 A::funcA被授予此间接访问权限。

关于c++ - 两个类与另一个类的成员函数交 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67953514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com