1

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


我的文件.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;

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

4

4 回答 4

3

这是可能的,但我认为这不明智。它只是通过将其内容暴露在任何地方而破坏了命名空间的全部目的。如果您想要不必指定Typedefs::or的舒适感,using Typedefs::xxx;或者using namespace Typedefs;我根本就不会创建命名空间。

于 2009-02-11T10:54:45.017 回答
2

使用未命名的命名空间。如果您想让名称仅对包含标题的文件可见

namespace {
  int i = 10;
}

上面的效果与下面的代码相同

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

因此任何其他文件都无法访问任何内容。

于 2009-02-11T10:59:01.930 回答
1

放置一个“使用命名空间 XXX;” 头文件中的指令通常被认为是一个坏主意,因为它确实破坏了首先拥有命名空间的想法。它很容易导致命名空间的引入应该避免的那种命名冲突。

我的建议 - 不要这样做,如有必要,请将它们粘贴到适当的源文件 (.cpp) 中。

于 2009-02-11T10:57:04.340 回答
0

您不妨在任何命名空间之外定义您的新类型,还是我遗漏了什么?

于 2009-02-11T10:56:46.803 回答