2009-06-22 47 views
1

我喜歡C++命名空間的概念,因爲它們有助於在避免名稱衝突的同時保持源代碼的簡潔。在.cpp文件中,使用「using namespace」聲明可以很好地工作。但是,在頭文件中,不能使用它,因爲它「打開」名稱空間,這意味着「使用名稱空間」不僅適用於當前頭文件,而且適用於之後編譯的所有內容。這部分消除了命名空間的優點。考慮一個頭文件,其中經常使用類「ourlib :: networking :: IpAddress」和「ourlib :: filesystem :: Path」。C++頭文件中的命名空間

有沒有辦法限制頭文件中「使用名稱空間」聲明的效果?

回答

2

不,不能這樣做:(

0

你可以只輸入單一類:

using ourlib::networking::lpAddress; 

至少如果我沒有記錯)

這可能污染全局命名空間還在,雖然。我傾向於使用頭文件中的長名稱空間前綴。這使得讀取其他開發人員的頭文件變得更容易(因爲您不必查找哪個類來自哪個名稱空間)。

+2

>此可能會污染全局名稱空間<這會污染全局命名空間 – Artyom 2009-06-22 08:55:32

4

可能放,最頻繁使用:: ourlib命名空間的類象

namespace ourlib { 
    using networking::lpAddress; 
} 

所以,如果他們獨特的項目,很可能你不會有問題。所以,任何 發生在頭,你將能夠直接訪問lpAddress沒有投入到 全局命名空間(我假設裏面namespace ourlib所有頭)