假设我们有两个类:
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.
非常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)