C++和嵌套私有类的友谊

C++ and friendship of nested private classes

本文关键字:友谊 嵌套 C++      更新时间:2023-10-16

我有两个类,就像下面的伪类一样

   class CA
   {
   private:
    class Impl;
   };
   class Cb
   {
   private:
    friend class CA::Impl;
   }

这段代码给了我一个编译错误,说类CA::Impl是私有的。难道真的不可能为嵌套的私人课程建立友谊吗?我还能做些什么来实现这个语义?

您、Adam和Steve

想象一下,有一个名叫Adam Stackie的名人,他有一个朋友名叫Steve

如果你知道Adam的某些事情,即使你不是他的朋友,但只是认为你和Steve足够亲密,你可以在公共场合抓住他,这不是很奇怪吗?

一个类并不是一个朋友的朋友,也不是一个可以延伸到某些部分的东西的朋友


稍微严重一点

要使你的代码段工作,你要么必须

  • 通过在CA中为Cb添加转发和好友声明,使Cb成为CA的好友、或
  • 公开CA::Impl,或者
  • 以任何其他方式确保CCD_ 6能够抓取CCD_

这是可能的,但您需要使Cb成为CA的朋友,这样它才能访问其私人成员。例如:

class Cb;
class CA
{
   friend class Cb;
private:
   class Impl;
};
class Cb
{
private:
   friend class CA::Impl;
};