我有一个带有 protected 方法Zig::punt()的类,并且我只希望它可被“鳄 pear ”类访问。在C++中,通常将使用“friend Avocado”说明符来执行此操作,但这将导致所有其他变量都可以被“Avocado”类访问;我不希望这样,因为这会破坏封装。

我想要的是不可能的,还是已经存在一种晦涩的技巧可以用来实现我想要的?或者可能会实现相同目的的替代类设计模式?

预先感谢您的任何想法!

最佳答案

这是一个丑陋但可行的技巧:

class AvocadoFriender {
protected:
  virtual void punt() = 0;
  friend class Avocado;
}

class Zig : public AvocadoFriender {
  ...
protected:
  void punt();
}

基本上,您添加了一个mixin类,该类仅向Avocado公开您想要的接口(interface)部分。我们利用了这样一个事实,即,通过继承与Avocado友好的类,除了最初暴露的内容之外,您不会暴露其他任何内容。

08-04 00:21