首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中可以加匿名命名空间中的类为好友吗?

在C++中可以加匿名命名空间中的类为好友吗?
EN

Stack Overflow用户
提问于 2013-11-09 13:59:25
回答 1查看 5.2K关注 0票数 26

我正在将代码从Java移植到c++,我想复制一些匿名功能。

在A.h文件中,我有:

代码语言:javascript
复制
class A
{
private:
  int a;

  class AnonClass;
  friend class AnonClass;
};

在文件A.cpp中,我有:

代码语言:javascript
复制
namespace
{
  class AnonClass
  {
  public:
    AnonClass(A* parent)
    {
      parent->a = 0; // This doesn't work, a is not accessible
    }
  }
}

在C++中可以加匿名命名空间中的类为好友吗?

在Java中,您可以声明匿名类,因此它将非常类似。此外,它不会将AnonClass暴露给A.h的客户端

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-09 16:21:28

不太为人所知的另一种方法是使类Anon成为A的成员类。在A类中,您只需要一行class Anon; --没有真正的代码,没有友元声明。注意,它放在A类中,几乎和Java中的一样。在.cpp文件中,您可以编写有关Anon的所有详细信息,但不是放在匿名名称空间中,而是放在A::

代码语言:javascript
复制
  class A::Anon { ..... };

你可以像往常一样拆分A::Anon的声明和实现,只需记住始终将A::添加到Anon。

类Anon是A的成员,因此可以访问A的所有其他成员。然而,A的客户端仍然不知道它,并且不会扰乱全局名称空间。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19872920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档