c ++如何将class声明为文件的本地文件

c++ How to declare a class as local to a file

所以,我知道静态函数是文件本地的函数。因此,不能从其他文件访问它们。这也适用于 classes 吗?我读过很多关于 static class 如何不声明 class 包含纯静态成员和方法(这是显而易见的)的争论,但找不到任何提到这是否会的内容声明 class 可在文件范围内本地访问,这更合乎逻辑。

如果没有,使用匿名命名空间怎么样,我听说它也可以用来声明文件本地函数?

您可以在未命名的命名空间中定义一个class,例如

namespace
{
    struct A {};
}

在这种情况下,class 名称将具有内部链接。也就是说,它仅在定义它的编译单元中可见,并且包含该定义的所有编译单元都有自己的 class 定义。

至于存储 class 说明符 static 然后(7.1.1 存储 class 说明符)

5 The static specifier can be applied only to names of variables and functions and to anonymous unions

Does this work for classes too?

没有。 class.

没有这样的 'static' 关键字

作为 'anonymous namespace' 的替代方法,您可以在单个 cpp 文件中完全声明 class (Foo) 及其定义(实现)。唯一可以使用此 class 的代码是该声明下方的代码 ...

文件X.cpp:

// Foo declared
class Foo
{
public:
   //...ctor
   //...dtor
   // etc.       
}

// ... Foo defined (implemented)
Foo::etc() { ... }


// implementation of X - only X has access to Foo.

X.cpp结束。

And File X.hpp does not reference Foo.

如果您随后发现名称冲突(即链接器报告重复符号),您唯一的选择是更改一个或另一个名称。


SO 中有很多关于匿名名称空间的问答。我很小心我把什么样的东西放在一个里面,并且同意它们可以防止名称冲突。

这两种技术我都用过。