2009-02-11 62 views
1

我有一個包含一些類型定義的小命名空間,我使用它來使代碼看起來更清晰。不過,我不想爲每個使用這些類型的文件添加「using namespace ...」行,畢竟我必須爲該文件添加一個#include。在命名空間聲明之後立即添加「using namespace」是否可以接受?


MYFILE.CPP:

#include "typedefs.h" 
void Bob() 
{ 
    IntList^ list = gcnew IntList; 
} 

typedefs.h:

namespace Typedefs 
{ 
    typedef List<int> IntList; 
    typedef array<int> IntArray; 
    typedef List<Byte> ByteList; 
    typedef array<Byte> ByteArray; 
    typedef List<String^> StringList; 
    typedef array<String^> StringArray; 
} 
using namespace Typedefs; 

難道是可以接受的添加「我們ing命名空間「行立即在命名空間聲明之後?如果不是,爲什麼不呢?

回答

2

使用unnamednamespace.If你想有隻可見在其中已包含了頭

namespace { 
    int i = 10; 
} 

以上具有相同的效果如下面的代碼

namespace randomName { 
    int i = 10; 
} 
using randomName; 

所以文件的名稱任何其他文件都無法訪問。

+0

謝謝。我查看了你的答案,並在http://winterdom.com/dev/cpp/nspaces.html中發現它的重申 – demoncodemonkey 2009-02-11 13:15:43

3

這是可能的,但我不認爲這是明智的。它無處不在地暴露了其名稱空間的全部用途。如果你想要不必指定Typedefs::using Typedefs::xxx;using namespace Typedefs;,我只是不會創建一個名稱空間。

0

你還不如定義新類型的任何命名空間外,還是我失去了一些東西?

1

把一個 '使用命名空間XXX;'指令到頭文件通常被認爲是一個壞主意,因爲它首先打敗了名稱空間的想法。它很容易導致引入命名空間應該避免的那種命名衝突。

我的建議 - 不這樣做,如果需要,將它們貼到相應的源文件(的.cpp)來代替。

相關問題