如何使一个类只能访问另一个类的某些私有成员?

mil*_*aki 5 c++ class friend

假设我们有两个类:

class Base
{
private:
    int x;
public:
    void f();
};

class Foo
{
    // some variables and methods
};
Run Code Online (Sandbox Code Playgroud)

现在每个人都可以打电话Base::f(),但我只Foo希望能够这样做.

为了达到这个效果,我们可以Base::f()私密并宣布Foo为朋友:

class Base
{
private:
    int x;
    void f();
    friend Foo;
};
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是,Foo有同时访问Base::f()Base::x(甚至任何其他私有成员Base).但我想Foo只能访问Base::f().

有没有办法让类(或函数)只授予另一个类的某些私有成员访问权限?或者也许任何人都可以建议更好地解决我的问题?

编辑:

我将尝试指定我需要的访问限制.首先,Base是库中的接口(事实上它是一个抽象类).用户仅使用派生自的类Base.Base::f()只调用Foo库中的另一个类.隐藏Base::f()用户很重要,因为只Foo知道何时调用它.同时,Foo不应该搞乱其他成员Base.

Ben*_*ley 6

非常hacky,但这将允许非常精细的访问.

class Base
{
private:
    int x;
    void f();
    friend class Base_f_Accessor;
};

class Base_f_Accessor
{
private:
    static void f(Base & b) { b.f(); }
    friend class Foo;
}

class Foo
{
    // some variables and methods
};
Run Code Online (Sandbox Code Playgroud)