C++与嵌套私有(private)类的友元

标签 c++ friend nested-class

我有 2 个类,如下面的虚拟类

   class CA
   {
   private:
    class Impl;
   };

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

这段代码给我编译错误,指出类 CA::Impl 是私有(private)的。真的不可能为嵌套的私有(private)类(class)建立友元吗?我还能做些什么来实现这种语义?

最佳答案

你、亚当和史蒂夫

想象一下,有一位名叫 Adam Stackie 的名人,他有一个名叫 Steve 的 friend 。

如果你知道关于 Adam 的某些事情,即使你不是他的 friend ,只是假设你和 Steve 足够亲密你在公共(public)场合抓他?

类不是隐含的 friend 的 friend ,也不是隐含的可以触及某些部分的事物的 friend 。


稍微严肃一点

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

  • Cb 成为 CA 的好友,方法是在 CA , 或者;
  • 公开CA::Impl,或者;
  • 以任何其他方式确保 Cb 可以捕获 CA::Impl

关于C++与嵌套私有(private)类的友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021392/

相关文章:

c++ - CodeEval,第一个非重复字符挑战——需要解释失败原因

c++ - 是否有一个 C/C++ 库可以让你找出一组表达式是否互斥?

c++ - 为什么 C++ 友元类只需要在其他命名空间中进行前向声明?

c++ - 嵌套类作为C++中成员函数的参数

java - java中的静态内部类中不应该声明非静态成员

java - java中的嵌套类和实现接口(interface)

c++ - 为什么模板只能在头文件中实现?

c++双重删除文件范围变量,链接问题?

c++ - 返回类型自动扣除的好友函数模板无法访问私有(private)成员

c++ - 非类模板已经声明为类模板