3

私は次のクラスを持っています:-

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 の他のプライベート メンバーと共に) からアクセスできるようになりますが、これは私が望むものではありません。

これは可能ですか、それともオブジェクト モデルを変更する必要がありますか?

4

1 に答える 1

2
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();
}
于 2012-05-31T15:14:51.977 に答える