VNa*_*haM 12 c++ design-patterns
我想创建一个B类的朋友类.我想这样做,因为这些非常相互作用,A需要改变B类的内部(我不希望使用public公开).但我想确保它只能访问几个选定的函数而不是所有函数.
例:
class A
{
};
class B
{
private:
void setState();
void setFlags();
friend class A
};
Run Code Online (Sandbox Code Playgroud)
我希望A能够访问setState但不能访问setFlags ...是否有设计模式或这样做的好方法,或者我在这种情况下完全访问或完全没有访问权限.
谢谢
Éri*_*ant 26
这取决于你的意思"一个好方法":)在comp.lang.c ++.版主我们前一段时间有同样的问题.您可能会看到它在那里生成的讨论.
IIRC,我们最终使用了"嵌套密钥的朋友"方法.应用于您的示例,这将产生:
class A
{
};
class B
{
public:
class Key{
friend class A;
Key();
};
void setFlags(Key){setFlags();}
private:
void setState();
void setFlags();
};
Run Code Online (Sandbox Code Playgroud)
我们的想法是必须使用"Key"调用public setFlags(),并且只有Key的朋友可以创建一个,因为它的ctor是私有的.
一种方法是通过显式接口,因为接口的实现者可以选择他们给他们的人:
class NearlyPrivateInterface {
public:
virtual void setState() = 0;
virtual void setFlags() = 0;
};
class A {
public:
void attach(NearlyPrivateInterface* instanceOfB);
};
class B: private NearlyPrivateInterface {
public:
void attach(A& a) { a.attach(this); }
};
Run Code Online (Sandbox Code Playgroud)