命名与多个名称空间的冲突?

2 c++ namespaces

我习惯了Java/C#处理包的方式.尽管我在C++中完成了大部分工作,但我暂时离开了名称空间.

我知道我可以有多个名称空间:

namespace A
{
    class Foo;
}

namespace B
{
    namespace C
    {
        class Bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好.我试图解决的是以下情况:

namespace A
{
    class Foo;
}

namespace B
{
    namespace A
    {
        class Bar : public A:Foo //here A shows up as namespace B::A
        {
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java中,如果我要编写包装器,这就是我要做的.说我试图将Artemis框架移植到我的引擎中.如果我需要编写一个完整的包装器,它将根据MyEngine.Artemis包名称命名.

在C++中,这可能吗?更重要的是,这是处理此类任务的适当方式吗?

Col*_*mbo 5

在诸如你的上下文中使用非限定名称时,名称查找将开始在外部范围之前检查最内层的封闭范围.特别是,在名称空间B中声明的任何名称都在全局名称空间中声明的任何名称之前被考虑
因此,命名空间B::A是首次发现,前::A-而很明显,没有成员FooB::A.请注意,有两个不同的命名空间可以A在您的代码中解决,但只有一个可以在没有进一步限定的情况下找到.

因此写

namespace B
{
    namespace A
    {
        class Bar : public ::A::Foo
        {
        };
    }
}
Run Code Online (Sandbox Code Playgroud)