细粒度访问说明符 c++

Fine grained access specifiers c++

本文关键字:c++ 说明符 访问 细粒度      更新时间:2023-10-16

我有以下类:-

class A {
  public:
    // some stuff that everyone should see
  protected:
    // some stuff that derived classes should see
  private:
    // some stuff that only I can see
    void f();
    void g();
};
现在,我希望 f() 只能从一组特定的类(比如类 B,C,D)访问,而 g() 可以从

一组其他类(比如类 D,E,F)访问。有没有办法在C++中指定这一点?如果我让所有类都成为A的朋友,那么f&g都可以从B,C,D,E,F(以及A的其他私人成员)访问,这不是我想要的。

这是否可能,还是应该更改我的对象模型?

class A_f {
    friend class B;
    void f();
};
class A_g {
    friend class C;
    void g();
};
class A: public A_f, public A_g {
    friend class A_f;
    friend class A_g;
private:
    void do_f();
    void do_g();
};
inline void A_f::f() { static_cast<A *>(this)->do_f(); }
inline void A_g::g() { static_cast<A *>(this)->do_g(); }
void B::something(A *a) {
    a->f();
}