2013-03-22 54 views
7

這是considered bad practice僱用using namespace在C + +頭。它是同樣一個壞主意,在頭使用namespace aliasing,每個實現文件應當聲明它希望使用別名?應該在頭文件中使用C++名稱空間別名?

由於標題是您傾向於使用完全指定名稱的地方(因爲我們不在名稱頭中使用名稱空間),所以別名會很有用,但當#included時,它們仍然會傳播您的源代碼。

這裏的最佳做法是什麼?什麼空間別名的範圍是什麼?

+2

如果你在你自己的命名空間中做的一切,那麼它很好,不是嗎?我認爲,只有在全球範圍內做到這一點,這纔是有問題的。 – Pubby 2013-03-22 14:45:40

回答

3

如果你把一個命名空間別名到你的頭,這個別名將成爲你的(公共)API的一部分。

有時,這種技術被用來做ABI兼容的版本(或者至少使破損可見)是這樣的:

namespace lib_v1 { ... } 
namespace lib_v2 { ... } 
namespace lib = lib_v2; 

或更常見:

namespace lib { 
    namespace v1 {} 
    namespace v2 {} 
    using v2; 
} 

在另一方面,如果你做這只是爲了節省一些打字它可能不是一個好主意。 (仍然比使用using指令更好)

1

我這樣做,與未命名空間是這樣的:

#include <whatyouneed> 
... 
namespace { 

typedef ... 
using .. 
namespace x = ... 

// anything you need in header but shouldn't be linked with original name 

} 

// normal interface 
class a: public x::... 
+0

我以前似乎沒有這種範例。我會等待其他人權衡,然後再決定是否要使用它:) – 2013-03-22 15:01:18

+0

另請參閱http://stackoverflow.com/questions/357404/why-are-unnamed-namespaces-used-and-what-是他們的好處 – podshumok 2013-03-22 15:12:07

+1

是關於在實現文件中使用無名稱的命名空間,與在頭文件中使用它們沒有什麼不同麼?任何你放入該命名空間的東西仍然可以被包含它的文件看到(在我的測試中)。 – 2013-03-22 15:32:29

相關問題