0

C++(03 或 11)中有没有办法限制类的可见性(类似于 Java 中的默认或包范围)?例如:

Foo应该只对 可见Bar但对 不可见Baz

class Foo {};
class Bar { Foo foo; /* OK */ };
class Baz { Foo foo; /* not visible, error */ };

此处建议的匿名命名空间解决方案如何限制声明它的命名空间之外的类的可见性?似乎没有工作。[演示: http: //ideone.com/fsEKPu ]我有什么误解吗?

4

2 回答 2

2

如果您只想Foo对 可见Bar,那么只需在内部创建Foo一个私有嵌套类Bar

class Bar
{
  public:

  private:
  class Foo { };
};

只有这种方式Bar(以及任何声明为 a friendof 的类Bar)才能访问Bar::Foo.

于 2013-01-10T13:42:32.697 回答
0

如果可以在不同的 cpp 文件中有 Bar 和 Baz 类定义,则在 Bar 存在(或 Bar1 和 Bar2 存在)的同一文件中定义 Foo ,并将 Foo 包含在匿名命名空间下。

于 2013-01-10T14:25:17.587 回答