如何声明"静态"类/枚举?

hel*_*922 3 c++

有没有办法强制类/枚举只能在同一个文件中访问,类似于静态函数/变量的行为?

// free-floating static function
// basically I want similar access restrictions on helper-type classes/enums
static void func(void)
{
}

// this is a compiler error
static class A
{
};
Run Code Online (Sandbox Code Playgroud)

goj*_*oji 9

Unnamed命名空间内声明的类是您想要的:

namespace
{

class SomeClass { };

}
Run Code Online (Sandbox Code Playgroud)

这将被编译器以这种方式命名为在该翻译单元之外无法访问.


Alo*_*ave 7

只需在未命名命名空间中声明它们即可.

请注意,static将变量范围限制为同一转换单元的用法受限于以下事实:它只能应用于变量声明和函数,而不能应用于用户定义的类型.

未命名的命名空间消除了这一缺点,允许您在同一翻译单元的范围内定义用户定义的类型.

来自链接的MSDN:

未命名的命名空间是静态变量声明的优越替代品.它们允许变量和函数在整个翻译单元中可见,但在外部不可见.虽然未命名的命名空间中的实体可能具有外部链接,但它们实际上由其翻译单元唯一的名称限定,因此永远不会从任何其他翻译单元中看到.