C++ 在C++;,给定类a中的一个成员函数,我们是否可以将其访问权限限制为只访问类B,而不允许B完全访问a?
可能重复:C++ 在C++;,给定类a中的一个成员函数,我们是否可以将其访问权限限制为只访问类B,而不允许B完全访问a?,c++,encapsulation,C++,Encapsulation,可能重复: 我已经想了好几次了,但都没能想出一个像样的方法 假设我在类a中有一个成员函数,我希望能够从一个不相关的类B调用该函数,但通常不可调用。您可能会说,“当然,将函数私有化,并声明B是a的朋友。”这就是我一直在做的,但这似乎有点过分了。我真的不想让B访问A中的所有内容,只是一个函数 简而言之:A::func()只能由类B调用,但B不能声明为A的朋友。可能吗?您可以将A的接口拆分为几个纯抽象基类,然后对具有适当方法的接口进行引用。其他类将只获取不包含此方法的接口。请记住,这不是非常可伸缩的
我已经想了好几次了,但都没能想出一个像样的方法 假设我在类a中有一个成员函数,我希望能够从一个不相关的类B调用该函数,但通常不可调用。您可能会说,“当然,将函数私有化,并声明B是a的朋友。”这就是我一直在做的,但这似乎有点过分了。我真的不想让B访问A中的所有内容,只是一个函数
简而言之:
A::func()
只能由类B调用,但B不能声明为A的朋友。可能吗?您可以将A
的接口拆分为几个纯抽象基类,然后对具有适当方法的接口进行引用。其他类将只获取不包含此方法的接口。请记住,这不是非常可伸缩的,因为接口的数量可能会很快变得非常大 一种可能的方法是创建一个受信任的类来包装a::func
,并将包装对象传递给B
。这同样要求包装器是a
的朋友,但您只需要管理一个这样的类,而所有外部类都可以使用包装器
例如:
class Wrapper;
class A {
private:
void func();
/* other methods */
public:
Wrapper getWrapper();
friend class Wrapper;
};
class Wrapper {
private:
A &ref;
private:
Wrapper(A &obj) : ref(obj) { }
public:
void func() {
ref.func();
}
friend class A;
};
Wrapper A::getWrapper() {
return Wrapper(*this);
}
可能的重复:我的问题确实是那个问题的重复。显然我的搜索工具很弱。这是一个非常重要的解决方案,特别是当你需要在多个地方进行搜索时。另外,我不认为C++模板可以让你在不同的函数和类名中概括这一点(虽然我可能是错的),这意味着你将对每一个你想启用的函数和类元组重复这个。