在命名空间声明后立即添加“using namespace”是否可以接受?

时间:2009-02-11 10:47:51

标签: namespaces c++-cli typedef using-statement

我有一个包含一些类型定义的小命名空间,我用它来使我的代码看起来更干净。但是我不想在每个使用其中一种类型的文件中添加“using namespace ...”行,毕竟我已经为文件添加了#include。


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;

在命名空间声明后立即添加“using namespace”行是否可以接受?如果没有,为什么不呢?

4 个答案:

答案 0 :(得分:3)

这是可能的,但我不认为这是明智的。它只是通过在任何地方公开其内容来击败命名空间的整个目的。如果您希望不必指定Typedefs::using Typedefs::xxx;using namespace Typedefs;,我根本就不会创建名称空间。

答案 1 :(得分:2)

使用unnamednamespace。如果您希望名称仅对包含标题的文件可见

namespace {
  int i = 10;
}
上面的

与下面的代码

具有相同的效果
namespace randomName {
  int i = 10;
}
using randomName; 

所以任何其他文件都无法访问任何内容。

答案 2 :(得分:1)

使用'using namespace XXX;'指向头文件通常被认为是一个坏主意,因为它确实打破了首先拥有命名空间的想法。它很容易导致命名冲突,引入命名空间应该避免。

我的建议 - 不要这样做,如果有必要,请将它们放入相应的源文件(.cpp)中。

答案 3 :(得分:0)

你可以在任何命名空间之外定义你的新类型,或者我错过了什么?