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