我已经习惯了Java / C#处理包的方式。尽管我在C ++中完成了大部分工作,但我暂时还没有使用命名空间。
我知道我可以有多个名称空间:
namespace A
{
class Foo;
}
namespace B
{
namespace C
{
class Bar;
}
}
这很好。我试图解决的是以下情况:
namespace A
{
class Foo;
}
namespace B
{
namespace A
{
class Bar : public A:Foo //here A shows up as namespace B::A
{
};
}
}
在Java中,如果我要编写包装器,这就是我要做的。说我试图将Artemis框架移植到我的引擎中。如果我需要编写一个完整的包装器,它将被命名为MyEngine.Artemis
包名称。
在C ++中,这可能吗?更重要的是,这是处理此类任务的适当方式吗?
答案 0 :(得分:5)
在诸如你的上下文中使用非限定名称时,名称查找将开始在外部范围之前检查最里面的封闭范围。特别是,在全局命名空间中声明的任何名称之前,将考虑在命名空间B
中声明的任何名称。因此,在B::A
之前首先找到名称空间::A
- 并且Foo
中显然没有成员B::A
。请注意,您的代码中可以使用A
来解决两个不同的命名空间,但只有一个可以在没有进一步限定的情况下找到。
因此写
namespace B
{
namespace A
{
class Bar : public ::A::Foo
{
};
}
}