如何限制类对特定其他类的可见性?

时间:2013-01-10 13:40:12

标签: c++

C ++(03或11)中是否存在限制类可见性的方法(类似于Java中的默认或包范围)?例如:

Foo仅对Bar可见,但对Baz不见。

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

此处建议的匿名命名空间解决方案How to restrict the visibility of a class outside the namespace in which it is declared?似乎不起作用。 [演示:http://ideone.com/fsEKPu]我误解了什么吗?

2 个答案:

答案 0 :(得分:2)

如果您希望Foo只显示Bar,那么只需在Foo内设置Bar私有嵌套类。

class Bar
{
  public:

  private:
  class Foo { };
};

这样,只有Bar(以及friend Bar Bar::Foo的所有类都可以访问{{1}}。

答案 1 :(得分:0)

如果可以在不同的cpp文件中使用Bar和Baz类定义,则可以在Bar所在的同一文件中定义Foo(或者Bar1和Bar2),并将Foo括在匿名名称空间下。