我想让 A 类成为 B 类的 friend 类。我想这样做,因为它们之间的交互非常多,并且 A 需要更改 B 类的内部结构(我不想使用 public 公开)。但我想确保它只能访问少数选定的功能,而不是所有功能。
例子:
class A
{
};
class B
{
private:
void setState();
void setFlags();
friend class A
};
我希望 A 能够访问 setState 但不能访问 setFlags... 是否有设计模式或这样做的好方法,或者在这种情况下我是否提供完全访问权限或根本没有访问权限。
谢谢
最佳答案
这取决于您所说的“好方法”是什么意思 :) 在 comp.lang.c++.moderated 我们不久前也有同样的问题。你可能会看到它产生的讨论there .
IIRC,我们最终使用了“嵌套键的 friend ”方法。应用于您的示例,这将产生:
class A
{
};
class B
{
public:
class Key{
friend class A;
Key();
};
void setFlags(Key){setFlags();}
private:
void setState();
void setFlags();
};
这个想法是公共(public)的 setFlags() 必须用“Key”调用,并且只有 Key 的 friend 可以创建一个,因为它的 ctor 是私有(private)的。
关于c++ - 访问受限的 friend 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609472/