【问题标题】:Is it acceptable to add a "using namespace" immediately after the namespace declaration?在命名空间声明之后立即添加“使用命名空间”是否可以接受?
【发布时间】:2009-02-11 10:47:50
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      namespace {
        int i = 10;
      }
      

      上面的效果和下面的代码一样

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

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

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2020-07-20
          • 1970-01-01
          • 2011-07-06
          • 1970-01-01
          • 1970-01-01
          • 2019-10-29
          • 2020-01-14
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多