如何声明“静态”类/枚举?

时间:2013-01-13 08:33:59

标签: 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
{
};

2 个答案:

答案 0 :(得分:9)

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

namespace
{

class SomeClass { };

}

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

答案 1 :(得分:7)

只需在 Unnamed namespace 中声明它们即可。

请注意,使用static将变量范围限制为相同的翻译单元受限于以下事实:它只能应用于变量声明和函数,但不是用户定义的类型

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

来自链接的MSDN:

  

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