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

时间:2014-06-03 17:28:16

标签: c++ friend nested-class

我有两个类,如下面的假人

   class CA
   {
   private:
    class Impl;
   };

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

此代码给出了编译错误,指出类CA :: Impl是私有的。是否真的不可能为嵌套的私有类建立友谊?我还能做些什么来实现这种语义?

2 个答案:

答案 0 :(得分:4)

你,亚当和史蒂夫

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

如果你知道关于 Adam 的某些事情,即使你不是他的朋友,只是假设你和 Steve 足够接近,这不是很奇怪你是否公开抓住他?

一个阶级不是隐含的朋友的朋友,也不是隐含的某种东西的朋友,它可以进入某些部分。


更严重

要使您的代码段正常工作,您必须

  • 通过在Cb中为CA添加前瞻和朋友声明,让Cb成为CA的朋友 ,或;
  • CA::Impl公开,或者
  • 以任何其他方式确保Cb可以抓住CA::Impl

答案 1 :(得分:2)

这是可能的,但您需要让Cb成为CA的朋友,以便允许其访问其私人成员。例如:

class Cb;

class CA
{
   friend class Cb;

private:
   class Impl;
};

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