仅在一个特定的类文件中使用命名空间

时间:2011-08-04 21:40:21

标签: c++ using

这或多或少都是考虑语法语义的一个相当简单的问题。

我在命名空间中有一个类,它使用了另一个命名空间中的很多类:

namespace SomeNamespace
{
   class MyClass
   {
      //...

      //These types of namespace uses occur alot around here:
      void DoSomething(const anothernamespace::anotherclass &arg);
      //...
   }
}

这个类当然是在它自己的.hpp文件中。

我想将名称空间“anothernamespace”中的所有内容都用于MyClass类,但是,如果我只是这样说:

namespace SomeNamespace
{
   using namespace anothernamespace;
   class MyClass
   {
      //...

      //These types of namespace uses occur alot around here:
      void DoSomething(const anothernamespace::anotherclass &arg);
      //...
   }
}

任何人

using namespace SomeNamespace;

将自动使用anothernamespace - 这是我想要避免的。

我如何实现我的目标?

3 个答案:

答案 0 :(得分:6)

最简单的非完美但有帮助的解决方案是使用命名空间别名:

namespace SomeNamespace
{
   namespace ans = anothernamespace; // namespace alias
   class MyClass
   {
      //...

      //These types of namespace uses occur alot around here:
      void DoSomething(const ans::anotherclass &arg);
      //...
   }
}

您的类用户不会“使用命名空间anothernamespace;”,使其更安全,但您仍然必须在类中使用别名。不确定它有什么帮助,这取决于你是否只想输入更少或者隐藏类型。在这里,您将完整的命名空间放在一种子命名空间中,该子命名空间不会进入用户的命名空间,但仍然可用。

否则......没有办法完全按照自己的意愿行事。使用命名空间在类声明中不起作用。

答案 1 :(得分:3)

这就是你想要的。两个名称空间都可供MyClass访问。 using namespace在标题中是不好的做法。

namespace SomeNamespace {
namespace other {
  using namespace anothernamespace;
  class MyClass {
  };
}}

namespace SomeNamepace {
  typedef other::MyClass MyClass;
}

您真的应该更喜欢在类声明中指定anothernamespace ::。

答案 2 :(得分:2)

你做不到。就这么简单,我很害怕。