2013-01-13 166 views
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 
{ 
}; 
+0

匿名命名空間? – goji

回答

9

具名命名空間內聲明的類是你想要什麼:

namespace 
{ 

class SomeClass { }; 

} 

這將被命名爲在編譯器,它是翻譯單元的不可訪問之外這樣一種方式錯位。

7

內的Unnamed namespace只是申報。

注意的static使用率的變量的範圍限制爲同樣的翻譯單元由以下事實的限制,它只能適用於變量聲明和功能,但不將用戶定義類型

未命名的名稱空間消除了這個缺點,並允許您在相同的翻譯單元範圍內定義用戶定義的類型。

從聯MSDN:

未命名空間是變量的靜態聲明優越的替代品。它們允許變量和函數在整個翻譯單元中可見,但在外部不可見。 儘管未命名名稱空間中的實體可能具有外部鏈接,但它們通過其翻譯單元唯一的名稱進行有效限定,因此永遠無法從其他任何翻譯單元看到。

+0

而且他們的工作和靜態功能的替代一樣。 – Potatoswatter