c++ - 访问受限的 friend 类

标签 c++ design-patterns

我想让 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/

相关文章:

python - 指向另一个对象的属性并添加你自己的

c++ - 在最终类中调用静态方法的静态基类构造函数的设计模式

python - 实现子表(查看表): designing class relationship

c++ - 具有纯虚方法的抽象类 - 为什么可以执行 "Abstract * abs3;"?

c++ - Sqlite - 不同的查询,不同的速度?

c++ - 通过引用传递变量并构造新对象

javascript - cometd 和 jQuery

c++ - HDF5 :Create a Dataset with string

c++ - 提供 QtConcurrent 功能的通用 C++ 库?

java - 如何重构代码以遵守规则 ‘open-closed’ ?