有没有办法强制类/枚举只能在同一个文件中访问,类似于静态函数/变量的行为方式?
// 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
{
};
有没有办法强制类/枚举只能在同一个文件中访问,类似于静态函数/变量的行为方式?
// 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
{
};
在Unnamed 命名空间中声明的类是您想要的:
namespace
{
class SomeClass { };
}
这将被编译器以这样一种方式命名为 mangled,即它在该翻译单元之外是不可访问的。
只需在Unnamed namespace中声明它们。
请注意,static
将变量的范围限制在同一翻译单元中的用法受到以下事实的限制:它只能应用于变量声明和函数,而不能应用于用户定义的类型。
未命名的命名空间消除了这个缺点,并允许您在同一翻译单元的范围内定义用户定义的类型。
来自链接的 MSDN:
未命名的命名空间是变量静态声明的更好替代品。它们允许变量和函数在整个翻译单元内可见,但在外部不可见。尽管未命名命名空间中的实体可能具有外部链接,但它们有效地由其翻译单元唯一的名称限定,因此永远无法从任何其他翻译单元看到。