3

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

// 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
{
};
4

2 回答 2

9

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

namespace
{

class SomeClass { };

}

这将被编译器以这样一种方式命名为 mangled,即它在该翻译单元之外是不可访问的。

于 2013-01-13T08:37:49.063 回答
7

只需在Unnamed namespace中声明它们。

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

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

来自链接的 MSDN:

未命名的命名空间是变量静态声明的更好替代品。它们允许变量和函数在整个翻译单元内可见,但在外部不可见。尽管未命名命名空间中的实体可能具有外部链接,但它们有效地由其翻译单元唯一的名称限定,因此永远无法从任何其他翻译单元看到。

于 2013-01-13T08:34:52.160 回答