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]我误解了什么吗?
答案 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括在匿名名称空间下。