在C++中共享相同名称的类和命名空间

Mon*_*ter 15 c++ symbols namespaces class

假设我在命名空间"abc"中有一个名为'foo'的类...

namespace abc {
     class foo {
         int a;
         int b;
     };
}
Run Code Online (Sandbox Code Playgroud)

...然后说我在另一个名称空间中有另一个名为"abc"的类

#include "foo.h"

namespace foo {
    class abc {
        abc::a = 10;
    };
}
Run Code Online (Sandbox Code Playgroud)

abc :: a不是定义的类型,因为它将搜索类abc,而不是命名空间abc.我如何正确引用另一个命名空间中的对象,其中该另一个命名空间与我所在的类具有相同的名称?

Die*_*lla 23

您可以使用::abc::xx,即将变量或类型标识为其绝对命名空间路径.如果未指定绝对名称,则相对名称将在包含名称空间/类中向上开始.


Oli*_*rth 6

您可以使用前缀::来表示从全局命名空间开始,因此在您的情况下,::abc将表示abc您的第一个代码段中的命名空间.


vit*_*aut 5

您可以指定::从中定义全局命名空间的完全限定名称,例如:

namespace abc {
   class foo {
       int a;
       int b;
   };
}

namespace foo {
  class abc {
      ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile
  };
}
Run Code Online (Sandbox Code Playgroud)